首页 > 解决方案 > Django 创建和更新视图:外键字段

问题描述

假设我有以下两个类:

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),但我不想为宗地指定初始值,只是缩小宗地的选择范围。

如果有人有想法,那将对我有很大帮助。

谢谢你。

标签: djangoconstraintsdjango-generic-viewsgeneric-foreign-key

解决方案


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 中将外键选择限制为相关对象


推荐阅读