как я могу настроить CreateModelMixin перед сохранением данных в БД

#django-rest-framework

#django-rest-framework

Вопрос:

я хочу назначить зарегистрированного пользователя модели, но perform_create не работает, помогите, как это исправить.

OkHttp: {«агрегатор»: [«Недопустимый pk «0» — объект не существует.»]}

 class FarmerViewset(
        mixins.CreateModelMixin, 
        mixins.RetrieveModelMixin, 
        mixins.UpdateModelMixin,
        # mixins.DestroyModelMixin,
        mixins.ListModelMixin,
        viewsets.GenericViewSet
    ):
    
    queryset = Farmer.objects.all()
    
    serializer_class = FarmerSerializers
        
    def perform_create(self, serializer):
        serializer.validated_data['aggregator'] = self.request.user
        serializer.save()
  

seliarizer.py

 class FarmerSerializers(serializers.ModelSerializer):
    farmer_requests = RequestSerializers(many=True, read_only=True)
    class Meta:
        model = Farmer
        fields = '__all__'
        extra_kwargs = {
            'created_at': {'read_only': True},
            'updated_at': {'read_only': True},
        }
  

Модель

 class Farmer(models.Model):
    first_name = models.CharField(_(" Enter first name"),max_length=30)
    last_name = models.CharField(_(" Enter last name"),max_length=30)
    phone = models.IntegerField(_("Telephone number"), null=True)
    district = models.ForeignKey(
            "authentication.District",
            verbose_name=("district"),
            on_delete = models.CASCADE
        )
    sector = models.ForeignKey(
        "authentication.Sector",
        verbose_name=("sector"),
        on_delete = models.CASCADE
    )
    aggregator = models.ForeignKey(
            "authentication.User",
            verbose_name=("aggregator"),
            on_delete = models.CASCADE
    )
    created_at = models.DateTimeField(_("Date of creation"),default=timezone.now)
    updated_at = models.DateTimeField(_("Updated date"),default=timezone.now)
  

Комментарии:

1. Можете ли вы поделиться своим model классом? и вы вошли в систему?

2. @adnankaya я поделился моделью и вошел в систему с помощью postman

Ответ №1:

Использовали ли вы permission_classes = (IsAuthenticated,) в своем views.py (at FarmerViewset ). А также добавили ли вы в settings.py следующую строку?

 
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}`