首页 > 解决方案 > 需要帮助更改视图上模型的属性

问题描述

我需要在视图上更改模型的属性,但这是我的代码工作视图:

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)

我的视图代码获取对象如果不可用返回 404 错误如果可用并且状态等于 PENDING 返回一些数据,否则将状态更改为等待并分配给恩人用户但是我的代码不起作用我该怎么办?和我的模型:

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()

标签: djangodjango-modelsdjango-views

解决方案


task.assign_to_benefactor(request.user.benefactor)

推荐阅读