Как применить условие в булевом поле в 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 я поместил поле 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 и ForeignKey пользователя, а модель ответа содержит другой ForeignKey вопроса.
Итак, мне нужно когда роль учитель поместит комментарий, поле is_answered в модели add_question должно стать true. Поскольку ученик также может комментировать свой вопрос, мне нужно, чтобы это условие было применено.
Я использую сериализатор, так как мне нужен API этого
Итак, должен ли я изменить в моем views.py или serializers.py и как я должен это сделать!
Была бы большая помощь, если бы кто-нибудь подсказал мне, как это сделать?
Спасибо и дайте мне знать, если потребуется любая другая информация.
Лучшей практикой было бы добавление такой кодировки в save() метод models.Model. Вы должны называть свои классы Model по-разному, например Question и Answer, потому что после создания, если вы захотите отредактировать или что-то еще, будет странно, если вам придется искать submit_answer, верно? И как сказал @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)