Django 模型外键,过滤?

Django model foreign key, filtering?

假设我有这样的模型:

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=… parameter [Django-doc]:

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

这将自动为 ModelFormModelAdmin 以及序列化程序中的表单应用过滤。

然而,这只会在 创建更新AttendanceList 时进行过滤:如果稍后 Assignment 设置is_attendableFalse,那么已经引用 AssignmentAttendanceList 更新、删除或阻止更新.