Ошибка утверждения при попытке создать представление для обновления одного поля в модели

У меня есть модель, которая выглядит следующим образом

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=50, blank=True)
    country = models.CharField(max_length=50, blank=True)
    bio = models.CharField(max_length=500, blank=True)
    profile_pic = models.ImageField(upload_to='profile/%Y/%m/%d', default='media/placeholder.png', blank=False,
                                    null=False)
    is_online = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

Я хотел бы создать конечную точку API для обновления конкретно поля is_active. Вот что у меня есть в моих представлениях для этого

class UpdateProfileActive(generics.UpdateAPIView):
    queryset = User.objects.all()
    serializer_class = UpdateUserSerializer
    lookup_field = 'profile.is_active'

    def update(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance, data='profile.is_active', partial=True)

        if serializer.is_valid():
            serializer.save()
            return Response({"message": "user is active field has been updated"})
        else:
            return Response({"message": "failed", "details": serializer.errors})

Вот мой сериализатор:

class UpdateUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(required=False)
    city = serializers.CharField(source='profile.city', allow_blank=True, required=False)
    country = serializers.CharField(source='profile.country', allow_blank=True, required=False)
    profile_pic = Base64ImageField(source='profile.profile_pic', max_length=None, use_url=True, required=False)
    is_online = serializers.BooleanField(source='profile.is_online', required=False)
    is_active = serializers.BooleanField(source='profile.is_active', required=False)
        # serializers.ImageField(source='profile.profile_pic', use_url=True, required=False)

    class Meta:
        model = User
        #, 'city', 'country', 'bio'
        fields = ['username', 'email', 'password', 'first_name', 'last_name', 'city', 'country', 'profile_pic', 'is_online', 'is_active']
        # fields = UserDetailsSerializer.Meta.fields + ('city', 'country')
        extra_kwargs = {'username': {'required': False},
                        'email': {'required': False},
                        'password': {'required': False},
                        'first_name': {'required': False},
                        'last_name': {'required': False},
                        'city': {'required': False},
                        'country': {'required': False},
                        'profile_pic': {'required': False},
                        'is_online': {'required': False},
                        'is_active': {'required': False},
                        }
    def update(self, instance, validated_data):
        profile_data = validated_data.pop('profile', {})
        city = profile_data.get('city')
        country = profile_data.get('country')
        profile_pic = profile_data.get('profile_pic')
        is_online = profile_data.get('is_online')
        is_active = profile_data.get('is_active')

        instance = super(UpdateUserSerializer, self).update(instance, validated_data)

        profile = instance.profile
        if profile_data:
            if city:
                profile.city = city
            if country:
                profile.country = country
            if profile_pic:
                profile.profile_pic = profile_pic
            if is_online:
                profile.is_online = is_online
            if is_active:
                profile.is_active = is_active
            profile.save()
        return instance

Когда я пытаюсь обновить это поле, я получаю ошибку:

AssertionError at /update_active/1/
Expected view UpdateProfileActive to be called with a URL keyword argument named "profile.is_active". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.
Вернуться на верх