Нужна помощь в изменении атрибутов моделей в представлении

Мне нужно изменить атрибуты моих моделей в представлениях, но этот мой код не работает представление:

class TaskRequest(APIView):
    permission_classes = [IsBenefactor,]
    def get(self ,request, task_id):
        obj = Task.objects.get(id=task_id)
        if not obj:
            raise Http404("not found")
        if obj.state==obj.TaskStatus.PENDING:
            data={
                'detail': 'This task is not pending.'
            }
            return Response(data , status=status.HTTP_404_NOT_FOUND)
        else:
            obj.assign_to_benefactor(self , obj.assigned_benefactor)
            obj.save()

            data={
                'detail': 'Request sent.'
            }
            return Response(data , status=status.HTTP_200_OK)

мой код вида get object If not available return 404 error if available and state equal to PENDING return some data otherwise change state to Waiting and assigned to benefactor user но этот мой код не работает, что мне делать? и мои модели :

class Task(models.Model):
    class TaskStatus(models.TextChoices):
        PENDING = 'P', 'Pending'
        WAITING = 'W', 'Waiting'
        ASSIGNED = 'A', 'Assigned'
        DONE = 'D', 'Done'

    title = models.CharField(max_length=60)
    state = models.CharField(
        max_length=1,
        default=TaskStatus.PENDING,
        choices=TaskStatus.choices,
    )
    charity = models.ForeignKey(Charity, on_delete=models.CASCADE)
    description = models.TextField(blank=True)
    assigned_benefactor = models.ForeignKey(
        Benefactor,
        on_delete=models.SET_NULL,
        null=True,
    )
    date = models.DateField(null=True, blank=True)
    age_limit_from = models.IntegerField(null=True, blank=True)
    age_limit_to = models.IntegerField(null=True, blank=True)
    gender_limit = models.CharField(
        max_length=2,
        choices=User.Gender.choices,
        default=User.Gender.UNSET,
    )
    def assign_to_benefactor(self, benefactor):
        self.state = Task.TaskStatus.WAITING
        self.assigned_benefactor = benefactor
        self.save()

Попробуйте изменить следующие строки кода:

obj.assign_to_benefactor(self , obj.assigned_benefactor)
obj.save()

To:

obj.assign_to_benefactor(obj.assigned_benefactor)
  1. Вам не нужно явно передавать self, так как он автоматически добавляется как документированный . Также обратите внимание, что self внутри Task должен быть Task экземпляр/объект, поэтому все, что вы пытаетесь сделать с obj.assign_to_benefactor(self,... внутри TaskRequest некорректно, потому что self там является TaskRequest экземпляром/объектом, а не Task экземпляром объекта.
  2. Вызов obj.save() уже избыточен, потому что вы уже сохраняете экземпляр изнутри Task.assign_to_benefactor
  3. .
  4. Для вашего рассмотрения, я не уверен, есть ли у вас другие случаи, в которых вызывается Task.assign_to_benefactor, но обратите внимание, что с вставленным кодом в вопросе, вы просто присваиваете ему тот же assigned_benefactor.
Вернуться на верх