2010-12-08 4 views
1

Ich habe einige miteinander verbundene Modelle, die auf einer einzigen Verwaltungsseite koexistieren müssen. Hier ist die Idee:Django Admin Inline-Formulare - Begrenzen Fremdschlüssel Abfragewert auf eine Reihe von Werten

Theater Produktionen haben Besetzung Mitglieder, und Besetzung Mitglieder haben bestimmte Rollen. Eine Theaterproduktion ist mit einem gegebenen geschriebenen Text (Spiel, Anpassung usw.) verbunden, und der geschriebene Text enthält eine Liste aller Rollen für diesen Text. Beim Hinzufügen einer Produktion muss jeder Darsteller einer dieser Rollen zugeordnet werden.

Hier ist, wie das Datenmodell funktioniert:

Modelle: Produktion, Person, Castmember, Rolle, WrittenText

Beziehungen: Produktion und Person haben eine M2M-Beziehung durch Castmember, die eine „Rolle“ Feld fügt - ein ForeignKey für ein Role-Objekt. Die Rolle selbst hat einen ForeignKey für ein WrittenText-Objekt.

So ist das Problem: auf der Admin-Seite für Productions habe ich eine TabularInline, um CastMembers hinzuzufügen. In den CastMember-Einträgen in der Tabelle sollte das Feld "role" nur auf die Rollen beschränkt sein, die in WrittenText angegeben sind, auf die die Produktion verweist.

machte ich eine halbwegs Lösung für das Problem, das durch die Modellform überschreibt:

class CastMemberForm(ModelForm): 
    class Meta: 
     model = CastMember 

    def __init__(self, *args, **kwargs): 
     super(CastMemberForm, self).__init__(*args, **kwargs) 
     if 'instance' in kwargs: 
     self.fields['role'].queryset = Role.objects.filter(source_text=self.instance.production.source_text) 

Aber das funktioniert nur, wenn Sie eine Person aus der Drop-down wählen, speichern und dann die Rolle wählen - Ansonsten bekommen Sie nur eine Liste aller Rollen. Das Herausnehmen von "if 'instance' in kwargs" gibt mir einen DoesNotExistError.

Ist das einfach viel zu komplex, um auf etwas wie clientseitige JS zu verzichten, oder gibt es eine einfachere Lösung, die ich vermisse?

+0

Haben Sie eine Lösung für dieses Problem gefunden? bin mit dem gleichen Problem konfrontiert:/ –

Antwort

0

Here ist ein Beispiel für verkettete Auswahlkästchen über Javascript/Ajax. Es sollte im Grunde das gleiche Prinzip sein, aber Sie sollten die js optimieren, um nicht eine Auswahlbox zu aktualisieren, aber alle in der Inline-Admin ... Vielleicht gibt Ihnen das eine kleine Inspiration!

+0

Danke für den Tipp, aber ich muss nicht einmal etwas bedingt tun - die Formulare in der Inline haben nicht einmal ein Dropdown für die Produktion, es basiert vollständig auf dem übergeordneten Objekt. Ich habe damit gearbeitet: http://www.stereoplex.com/blog/filtering-dropdown-lists-in-the-django-admin, aber das bringt mich nicht weiter als das, was ich vorher hatte. Ich arbeite noch daran, hoffentlich kann ich hier bald eine Antwort posten. :) –

Verwandte Themen