首頁 >後端開發 >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 過濾外鍵選擇

簡介

簡介

在表可以最好根據某些標準限制向使用者提供的針對特定領域的選擇。這在涉及分層資料的場景中特別有用,例如選擇外鍵時。

案例研究:在ModelForm 中選擇外鍵選項
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)

讓我們考慮一個假設具有以下模型的Django 項目:

在這種情況下,每家公司都有多個費率和客戶。每個客戶必須從其母公司的費率中選擇基本費率,而不是其他公司的費率。

使用查詢集過濾限制外鍵選擇
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)

限制費率的選擇客戶表單中的欄位僅包含與所選公司相關的費率,我們可以將ClientForm 類別修改為如下:

在此程式碼中,我們從與表單關聯的實例中擷取公司ID。這可確保根據正確的公司過濾費率選項。

  • 附加說明
  • 此方法與 Django 1.0 及更高版本相容。
ForeignKeyField 的 limit_choices_to 參數設計用於 Django 管理介面,但可能不會總是適合使用對於更複雜的過濾場景,可能需要重寫 ModelChoiceField 類別的 get_queryset 方法。

以上是如何在 Django ModelForms 中過濾外鍵選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn