J'ai un modèle qui ressemble à ceci: Donc, chaque fois qu'un nouvel événement est créé, un groupe de rôles est créé avec elle. Dans le modèle Invite, comment puis-je indiquer uniquement les rôles associés à l'événement que j'ai sélectionné dans le formulaire de modification de Django admin au lieu de montrer toutes les entrées dans le modèle de rôle? P> P>
4 Réponses :
Vous devez fournir une coutume formfield_for_forignkey code>
méthode dans votre classe d'administration pour le modèle.
Cet exemple (de la documentation que j'ai liée), devriez vous aider à démarrer: p>
class MyModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "car": kwargs["queryset"] = Car.objects.filter(owner=request.user) return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Cela sera fait à l'heure de la charge et son non dynamique. Je crois que les cohutes code> doivent être
filtrés code> de manière dynamique. C'est ce que la question semble à propos.
@Pannu: Non, ceci est réellement proche de la solution correcte, mais pour résoudre ce problème particulier, vous devez accéder à l'instance Invitation en question.
Vous souhaitez filtrer de manière dynamique les choix des rôles code> code> Voici Comment vous pouvez faire ce travail .. p> 2: strong> à partir des rôles code> modèle code> Par exemple:
Ceci a code>, vous aurez donc besoin
ajax code> pour effectuer cette tâche.
Onchange code> de l'événement code> code> Envoyer le
event_id Code> à votre personnalisé
Affichage code> via
Ajax code>. p>
Filtre CODE> basé sur le
Event_ID CODE> Vous avez reçu de la requête CODE> AJAX CODE> et renvoyez les rôles code> par code> par
Serializing dans
json code>. P>
jQuery code>
getjson code> Exemple p>
def my_view(request,event_id):
qs = Role.objects.filter(event=event_id).values_list('id')
return HttpResponse(simplejson.dumps(qs),mimetype='application/javascript')
La solution a besoin de script Java car lorsqu'il choisit l'événement code> code> dans le formulaire, les rôles doivent être filtrés de manière dynamique (sans appuyer sur une touche, soumettant tout le formulaire, puis revenir avec les choix filtrés), donc AJAX code> est la voie à suivre.
Oui, si vous souhaitez que cela change dans le navigateur lorsque vous modifiez l'événement sélectionné dans le widget, vous devez bien sûr utiliser JavaScript. Désolé, j'ai mal interprété.
Vous voulez probablement quelque chose dans les lignes de: Documentation Django pour formfield_for_manytomany code>
p> p>
La question indique clairement «Comment puis-je indiquer uniquement les rôles associés à l'événement que j'ai sélectionné b> dans le formulaire modifier B>" qui est définitivement fait dynamique (Ajax). Votre solution est statique.
Ah, j'ai raté ce détail, merci. Je n'appellerais pas nécessairement cela une solution static i> tel qu'il varie en fonction de l'objet chargé et de l'événement sélectionné dans la base de données, mais je pense que vous avez raison cela ne résout pas le problème en fait I> Être présenté :)
Je crois qu'il y a deux façons de résoudre ce problème: p>
méthode Ajax comme décrit par @pannu P> li>
Méthode non AJAX pouvant être obtenue en déplaçant le champ Event code> en dehors du formulaire de modification (ce qui signifie qu'il y aurait un autre formulaire pour modifier
événement code>) et Filtrage
Rôles Code> en fonction de l'événement code> actuel code>. Je devais résoudre récemment un problème similaire avec la limitation des options disponibles en fonction de l'appartenance d'un objet à un site spécifique. Voici une description et code, si vous êtes intéressé: http: // source.mihelac.org/2011/09/8/django-sites-ext/ p> li>
ol>