假设我有以下两个类:
class Parcel(models.Model):
name = models.CharField(max_length=NAME_MAX_LENGTH)
garden = models.ForeignKey(Garden, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Bed(models.Model):
parcel = models.ForeignKey(Parcel, on_delete=models.CASCADE)
name = models.CharField(max_length=NAME_MAX_LENGTH)
length = models.IntegerField()
width = models.IntegerField()
我正在使用 Django 的通用视图来创建和更新新床。由于parcel
是一个外键,Django 会自动创建一个包含数据库中所有现有包裹的选择输入。但是,我想告诉 Django 只放置具有特定garden_id的包裹。 我查看了函数get_initial(self)
,但我不想为包裹指定初始值,只是缩小了包裹的选择范围。
如果有人有想法,那对我有很大帮助。
谢谢。
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to
例:
staff_member = models.ForeignKey(
User,
on_delete=models.CASCADE,
limit_choices_to={'is_staff': True},
)
在您的情况下,可以使用:
limit_choices_to={'garden_id__in': ['list', 'of', 'valid', 'ids']}
源: 如何在 django 中将外键选择限制为相关对象