Salut,
Merci pour ta solution qui fonctionne nikel.
Entre temps j'avais trouvé la (demie) solution suivante :
class FormCom(ModelForm):
def __init__(self, auteurAct, *args, **kwargs):
super(FormCom, self).__init__(*args, **kwargs)
if type(auteurAct) == str:
self.fields['livre'].queryset =
Livre.objects.filter(auteur=auteurAct)
class Meta:
model = Commentaire
fields = ['livre', 'com']
Avec une instanciation comme suit :
formCom = FormCom(auteur)
Je dis demie solution car cela fait bien le travail recherché (filtrer les
livres de l'auteur voulu), mais par contre mon formulaire n'est pas valide au
moment de l'enregistrement.
Alors qu'avec ta solution tout ce passe à merveille.
Merci.
Charlie
Le vendredi 26 septembre 2014, 19:42:05 Arthur Vuillard a écrit :
>
> Hello
> Je répond vite fait sans vérifier. Les déclarations de Model et de Form
> ont l'air correct. À l'instanciation du form, il faut faire :
>
> formCom = FormCom()
> formCom.fields['livre'].queryset = Livre.objects.filter(auteur=un_auteur)
>
>
> Plus d'infos sur :
> https://docs.djangoproject.com/en/1.7/ref/forms/fields/#django.forms.ModelChoiceField.queryset
>
> Arthur
>
>
>
> Le 26/09/2014 18:37, Charlie Gentil a écrit :
> > Bonjour,
> >
> > Voici un extrait de mon models.py
> >
> > class Auteur(models.Model):
> > auteurNom = models.CharField('Nom', max_length=200)
> > ....
> >
> > class Livre(models.Model):
> > auteur = models.ForeignKey('Auteur')
> > titre = models.CharField('titre', max_length=200)
> > ....
> >
> > class Commentaire(models.Model):
> > livre = models.ForeignKey('Livre')
> > com = models.CharField('Commentaires', max_length=200)
> > ....
> >
> >
> >
> >
> > Je fais le nécessaire pour accéder à une page dont l'URL pour être :
> > localhost:8000/auteur/1/ pour le premier auteur de ma BDD.
> > Je souhaite y ajouter un formulaire afin de créer un commentaire sur un
> > livre de l'auteur.
> >
> > J'ai donc commencé par créer un ModelForm comme suit :
> > class FormCom(ModelForm):
> > class Meta:
> > model = Commentaire
> > fields = ['livre', 'com']
> >
> >
> > Je peux donc ainsi avoir sur ma page web un combobox avec les livres entrés
> > dans ma BDD et une zone me permettant de faire un commentaire.
> > Le souci est que là j'ai TOUS les livres de ma BDD, alors que moi j'aimerai
> > n'avoir évidemment que ceux de l'auteur dont l'id est 1.
> >
> > Donc lorsque je charge ma page depuis views.py j'aimerai pouvoir exclure
> > les livres qui ne sont pas de l'auteur choisi, c'est à dire en gros un truc
> > du genre :
> >
> > def com(request, auteur):
> >
> > formCom = FormCom(avec_uniquement_livre_de_auteur)
> >
> > ....
> >
> > return render(request, 'business/record.html',{'com':formCom,
> >
> > ....}
> > )
> >
> >
> > J'espère avoir été assez clair.
> > Est-ce possible ?
> >
> > Si ce n'est pas le cas je vais devoir faire un truc du genre :
> >
> > Livre.objects.filter(auteur = auteur)
> >
> > et dans mon formulaire web ajouter manuellement un combobox ... un peu
> > galère :)
> >
> > D'avance merci à tous.
> >
> >
> > Charlie
> > _______________________________________________
> > django mailing list
> > [email protected]
> > http://lists.afpy.org/mailman/listinfo/django
>
> _______________________________________________
> django mailing list
> [email protected]
> http://lists.afpy.org/mailman/listinfo/django
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django