Django ModelForm 过滤外键选择
简介
在 Django 中创建表单时,可以最好根据某些标准限制向用户提供的针对特定领域的选择。这在涉及分层数据的场景中特别有用,例如选择外键时。
案例研究:在 ModelForm 中选择外键选项
让我们考虑一个假设具有以下模型的 Django 项目:
class Company(models.Model): name = ... class Rate(models.Model): company = models.ForeignKey(Company) name = ... class Client(models.Model): name = ... company = models.ForeignKey(Company) base_rate = models.ForeignKey(Rate)
在这种情况下,每个公司都有多个费率和客户。每个客户必须从其母公司的费率中选择基本费率,而不是其他公司的费率。
使用查询集过滤限制外键选择
限制费率的选择将客户表单中的字段设置为仅与所选公司关联的费率,我们可以按如下方式修改 ClientForm 类:
class ClientForm(ModelForm): class Meta: model = Client fields = ['name', 'base_rate'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['base_rate'].queryset = Rate.objects.filter(company_id=self.instance.company_id)
在此代码中,我们从与表单关联的实例中检索公司 ID。这可确保根据正确的公司过滤费率选项。
附加说明
以上是如何在 Django ModelForms 中过滤外键选择?的详细内容。更多信息请关注PHP中文网其他相关文章!