我可以过滤Django模型的选择吗.ForeignKey



我与模型Vehicle和Accounts有一个ManyToMany关系,还有一个Assignment的关联实体,它将两个表的PKs都作为FK.

现在,Accounts表有一个is_driver字段,该字段采用布尔值,因为默认情况下,所有帐户都是通勤者,但有些帐户可以是driver。

有没有办法将我的模型设置为只筛选Is_driver==True的帐户?

我的型号.py

class Puv(models.Model):
plate_number = models.CharField(max_length=50, unique=True)
temporary_plate = models.BooleanField(default=True) 
route = models.ForeignKey(Route, on_delete=models.CASCADE, blank=True, null=True)
class Assignment(models.Model):
driver = models.ForeignKey(User, on_delete=models.CASCADE)
puv = models.ForeignKey(Puv, on_delete=models.CASCADE)
assignment_date = models.DateField(auto_now_add=True)

用户模型在一个单独的应用

class User(AbstractBaseUser, PermissionsMixin):
....
is_driver = models.BooleanField(default=False)

您可以使用limit_choices_to=…参数[Django doc]:

class Assignment(models.Model):
driver = models.ForeignKey(
User,
on_delete=models.CASCADE,
limit_choices_to={'is_driver': True}
)
puv = models.ForeignKey(Puv, on_delete=models.CASCADE)
assignment_date = models.DateField(auto_now_add=True)

这不会由数据库强制执行,而是由ModelFormModelAdmin进行检查。


注意:通常使用settings.AUTH_USER_MODEL[Django-doc]来引用用户模型比直接使用User模型[Django-dc]更好。有关更多信息,请参阅文档中引用User模型的部分。

最新更新