Внешний ключ модели Django, фильтрация?

Допустим, у меня есть такие модели:

class Assignment(models.Model):
  name = [...]
  is_attendable = models.BooleanField([...])

class AttendanceList(models.Model):
 what_to_attend = models.ForeignKey(Assignment, on_delete=models.CASCADE)
 who_attends_it = [...]

Итак, если я установлю is_attendable в False, он не должен быть указан в списке посещаемости. Это похоже на фильтрацию запроса внешнего ключа... Как я могу это сделать?

Вы можете работать с параметром limit_choices_to=… [Django-doc]:

class AttendanceList(models.Model):
    what_to_attend = models.ForeignKey(
        Assignment,
        on_delete=models.CASCADE,
        limit_choices_to={'is_attendable': True}
    )

Это автоматически применит фильтрацию для ModelForm и форм в ModelAdmin, а также в сериализаторах.

Однако это будет фильтровать только при создании или обновлении AttendanceList: если позже Assignment установит is_attendable на False, то AttendanceList, которые уже ссылаются на этот Assignment, будут не обновлены, удалены или предотвращены от обновления.

Вернуться на верх