如何在 django rest 框架中的布尔字段中应用条件?

How to apply condition in boolean field in django rest framework?

我正在做一个博客类型的网站。

学生提问,老师回答。

我放了两个用户角色 师生

class User(AbstractBaseUser, PermissionsMixin):
    USER_TYPE = (
        ('None', 'None'),
        ('Student', 'Student'),
        ('Teacher', 'Teacher'),
    )
    user_type = models.CharField(choices=USER_TYPE, default='Student', max_length=50)

这是定义角色的用户模型。

Post 提交问题的模型和回答问题的评论模型。

在 Post 模型中,我将字段 is_answered 设置为 False

class add_question(models.Model):
    created_by = models.ForeignKey(User, blank=False, on_delete=models.CASCADE)
    is_answered = models.BooleanField(default=False)

答案模型[即评论一]被称为问题的外键

class submit_answer(models.Model):
    question_id = models.ForeignKey(
        add_question, blank=False, on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, blank=False, on_delete=models.CASCADE)

问答模型都包含 created_by 字段和 User 的外键,答案模型包含问题的另一个外键。

所以 我需要 教师角色 将在 add_question 模型中的 is_answered 字段发表评论应该变成真的。 作为学生也可以对 his/er 问题发表评论,所以我需要有条件才能申请。

我正在使用序列化器,因为我需要 API 这个

所以,我应该修改我的 views.py 还是 serializers.py,我应该怎么做!

如果有人指导我如何做,那将是很大的帮助?

谢谢,如果需要任何其他信息,请告诉我。

最佳做法是在 models.Modelsave() 方法中添加这样的代码。您应该以不同的方式命名您的模型 类,例如 QuestionAnswer,因为在创建之后,如果您想要编辑什么的,如果您必须搜索 [=15 会很奇怪=],对吧?正如@wjh18 所说,在 类.

中使用 CamelCase

另外 question_id 通常不是个好主意,最好考虑 question,因为它会直接指向整个对象,而不是它的 id。

class Answer(models.Model):
    question = models.ForeignKey(Question, blank=False, on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, blank=False, on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        if self.created_by.user_type == 'Teacher' and not self.question.is_answered:
            self.question.is_answered = True
            self.question.save()
        super().save(*args, **kwargs)