Client.post не передает FK
Надеюсь, кто-нибудь сможет мне помочь, я пытаюсь протестировать метод post на API, но метод post не работает так, как ожидалось.
Когда я передаю полезную нагрузку в метод post, поля points и de code загружаются, но поля shopper и card, которые оба являются ключами Foreing Keys, не загружаются и передается нулевое значение, так как это обязательные поля, в итоге я получил ошибку.
Я проверил, и значения для self.shopper.pk и self.card.pk верны.
MYCARDS_URL = reverse('mycards:mycards-list')
def test_create_mycards(self):
"""Test creating a mycards"""
payload = {
'shopper': self.shopper.pk,
'card': self.card.pk,
'points': 0,
'code': "code",
}
res = APIClient().post(MYCARDS_URL, payload)
Я проверил, не связано ли это с моим сериализатором, но все в порядке, как вы можете видеть:
class MycardsSerializer(serializers.ModelSerializer): """Сериализатор для карточек."""
class Meta:
model = MyCards
fields = ['id', 'shopper', 'card', 'updated', 'created']
read_only_fields = ['id', 'created']
class MycardsDetailSerializer(MycardsSerializer): """Сериализатор для детального представления карточки.""""
class Meta(MycardsSerializer.Meta):
fields = MycardsSerializer.Meta.fields + [
'points', 'code']
Вот также мой набор представлений, который, кажется, в порядке:
class MycardsViewSet(viewsets.ModelViewSet):
"""View for manage card APIs."""
serializer_class = serializers.MycardsDetailSerializer
queryset = MyCards.objects.all()
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
def get_queryset(self):
"""Retrieve cards for authenticated user."""
shoppers = list(Shopper.objects.all().filter(
user=self.request.user).values_list('id'))
return self.queryset.filter(shopper=shoppers[0]).order_by('-id')
def get_serializer_class(self):
"""Return the serrializer class for request."""
if self.action == 'list':
return serializers.MycardsSerializer
return self.serializer_class
def perform_create(self, serializer):
"""Create a new recipe."""
serializer.save()