Как применить условие в булевом поле в 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)
Вернуться на верх