首页 >后端开发 >Python教程 >如何在 Django ModelForms 中过滤外键选择?

如何在 Django ModelForms 中过滤外键选择?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 10:38:03294浏览

How to Filter ForeignKey Choices in Django ModelForms?

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 1.0 及更高版本兼容。
  • ForeignKeyField 的 limit_choices_to 参数设计用于在 Django 管理界面中使用,可能并不总是适合在表单中使用。
  • 对于更复杂的过滤场景,可能需要重写 get_queryset 方法ModelChoiceField 类。

以上是如何在 Django ModelForms 中过滤外键选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn