J'ai des modèles interdépendants qui doivent coexister sur une même page d'administration. Voici l'idée:Formulaires en ligne admin de Django - limite le jeu de requêtes de clés étrangères à un ensemble de valeurs
Les productions théâtrales ont des acteurs et les acteurs ont des rôles spécifiques. Une production théâtrale est liée à un texte écrit donné (jeu, adaptation, etc.), et le texte écrit contient une liste de tous les rôles pour ce texte. Lors de l'ajout d'une production, chaque acteur doit être associé à l'un de ces rôles.
Voilà comment le modèle de données fonctionne:
Modèles: Production, personne, castmember, rôle, WrittenText
Relations: Production et personne ont une relation M2M à travers castmember, ce qui ajoute un champ "rôle" - une ForeignKey à un objet Role. Rôle lui-même a un ForeignKey à un objet WrittenText. Donc, le problème est le suivant: dans la page d'administration pour Productions, j'ai une TabularInline pour ajouter CastMembers. Les entrées CastMember de la table doivent avoir leur champ 'role' limité aux seuls rôles spécifiés dans WrittenText que les références de production.
J'ai fait une solution à mi-chemin au problème en remplaçant le formulaire modèle:
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)
Mais, cela ne fonctionne que si vous choisissez une personne de la liste déroulante, enregistrer, puis choisissez le rôle - sinon vous obtenez juste une liste de tous les rôles. Sortir "if" instance "dans kwargs" me donne un DoesNotExistError.
Est-ce simplement trop compliqué à faire sans quelque chose comme JS côté client, ou existe-t-il une solution plus simple qui me manque?
Avez-vous trouvé une solution à ce problème? Je suis confronté au même problème:/ –