Нужна помощь в изменении атрибутов моделей в представлении
Мне нужно изменить атрибуты моих моделей в представлениях, но этот мой код не работает представление:
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)
- Вам не нужно явно передавать
self
, так как он автоматически добавляется как документированный . Также обратите внимание, чтоself
внутриTask
должен бытьTask
экземпляр/объект, поэтому все, что вы пытаетесь сделать сobj.assign_to_benefactor(self,...
внутриTaskRequest
некорректно, потому чтоself
там являетсяTaskRequest
экземпляром/объектом, а неTask
экземпляром объекта. - Вызов
obj.save()
уже избыточен, потому что вы уже сохраняете экземпляр изнутриTask.assign_to_benefactor
.
- Для вашего рассмотрения, я не уверен, есть ли у вас другие случаи, в которых вызывается
Task.assign_to_benefactor
, но обратите внимание, что с вставленным кодом в вопросе, вы просто присваиваете ему тот жеassigned_benefactor
.