Django Modelform Beispiel mit benutzerdefinierten queryset für ein bestimmtes Feld
-
10-07-2019 - |
Frage
Ich habe ein Modell nicht im Gegensatz zu dem folgenden:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Alle Benutzer in einer Reihe von Fabriken arbeiten können und damit ihre Benutzerprofile haben alle eine ManyToManyField
Factory
.
Jetzt möchte ich eine ModelForm
für Bike
konstruieren, aber ich will die made_at
Liste von nur Fabriken bestehen, bei dem der aktuelle Benutzer arbeitet. Die Idee ist, dass Nutzer in der Lage sein sollte, Fahrräder hinzufügen, die sie zusammengestellt haben, und geben Sie die von den Fabriken das Fahrrad bei gemacht wurde.
Wie kann ich das tun?
Lösung
Sie Frage könnte ein Betrogene davon sein .
S. Lott 's Antwort gibt es das Ticket Ihr Problem zu lösen. Er antwortete:
ForeignKey wird durch django.forms.ModelChoiceField dargestellt, die eine ChoiceField ist, deren Entscheidungen sind ein Modell QuerySet. Siehe die Referenz für ModelChoiceField.
Also, stellen eine QuerySet auf das queryset Attribut des Feldes. Hängt davon ab, wie Sie Ihre Form gebaut wird. Wenn Sie eine explizite Form bauen, werden Sie Felder direkt benannt haben.
form.rate.queryset = Rate.objects.filter(company_id=the_company.id)
Wenn Sie die Standardmodelform Objekt nehmen,form.fields["rate"].queryset = ...
Dies wird ausdrücklich in der Ansicht getan. Kein Hacking um.
Andere Tipps
versuchen, so etwas wie dies in der Ansicht
form = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)
ändern Sie das Werk queryset, so dass sie das Werk identifiziert, die der Benutzer arbeitet an.
Nowaday, sollten Sie verwenden:
form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
'alumno',
'alumno__estudiante',
'alumno__estudiante__profile',
'item'
)