Wie filtere ich ForeignKey-Auswahlmöglichkeiten in Django ModelForms?

Mary-Kate Olsen
Freigeben: 2024-11-16 10:38:03
Original
210 Leute haben es durchsucht

How to Filter ForeignKey Choices in Django ModelForms?

Django ModelForm Filtering ForeignKey Choices

Einführung

Beim Erstellen von Formularen in Django ist dies möglich Es wäre wünschenswert, die Auswahlmöglichkeiten für Benutzer auf ein bestimmtes Feld basierend auf bestimmten Kriterien einzuschränken. Dies kann besonders in Szenarien mit hierarchischen Daten nützlich sein, beispielsweise bei der Auswahl eines Fremdschlüssels.

Fallstudie: Auswählen von Fremdschlüsseloptionen in einer ModelForm

Betrachten wir eine Hypothese Django-Projekt mit den folgenden Modellen:

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)
Nach dem Login kopieren

In diesem Fall hat jedes Unternehmen mehrere Tarife und Kunden. Für jeden Kunden muss ein Basistarif aus den Tarifen seiner Muttergesellschaft ausgewählt werden, nicht aus den Tarifen eines anderen Unternehmens.

Einschränken der ForeignKey-Auswahl mithilfe der QuerySet-Filterung

Um die Auswahlmöglichkeiten für den Tarif einzuschränken Um das Feld „ClientForm“ im Client-Formular nur auf die mit dem ausgewählten Unternehmen verknüpften Tarife zu beschränken, können wir unsere ClientForm-Klasse wie folgt ändern:

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)
Nach dem Login kopieren

In Mit diesem Code rufen wir die Firmen-ID aus der mit dem Formular verknüpften Instanz ab. Dadurch wird sichergestellt, dass die Tarifauswahl nach dem richtigen Unternehmen gefiltert wird.

Zusätzliche Hinweise

  • Dieser Ansatz ist mit Django 1.0 und höher kompatibel.
  • Das limit_choices_to-Argument von ForeignKeyField ist für die Verwendung innerhalb der Django-Administratoroberfläche konzipiert und möglicherweise nicht immer für die Verwendung geeignet in Formularen.
  • Für komplexere Filterszenarien kann es erforderlich sein, die get_queryset-Methode der ModelChoiceField-Klasse zu überschreiben.

Das obige ist der detaillierte Inhalt vonWie filtere ich ForeignKey-Auswahlmöglichkeiten in Django ModelForms?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage