如何在 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.Model
的 save()
方法中添加这样的代码。您应该以不同的方式命名您的模型 类,例如 Question
和 Answer
,因为在创建之后,如果您想要编辑什么的,如果您必须搜索 [=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)
我正在做一个博客类型的网站。
学生提问,老师回答。
我放了两个用户角色 师生
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.Model
的 save()
方法中添加这样的代码。您应该以不同的方式命名您的模型 类,例如 Question
和 Answer
,因为在创建之后,如果您想要编辑什么的,如果您必须搜索 [=15 会很奇怪=],对吧?正如@wjh18 所说,在 类.
另外 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)