Внешний ключ модели 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, будут не обновлены, удалены или предотвращены от обновления.