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()
Вернуться на верх