Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

filtrer un foreignkey avec django

+1 vote

Bon je suis entrain de créer une application de gestion de contact avec un formulaire pour la création de contact et un autre pour la création de groupe.Mais voila avec le formulaire de contact je rencontre un problème.Pendant de la création d'un contact le champ groupe renvoi tous les groupes qui sont crées dans la base au lieu de retourner uniquement les groupes qui sont crées uniquement par l'utilisateur.voila un peu mon model

class Groupe(models.Model):
    nom_groupe = models.CharField(_('Nom'), max_length=200)
    groupe_utilisateur = models.ForeignKey(Profile)
    ....

class Contact(models.Model):
    prenom = models.CharField(_('prenom'), max_length=100)
    nom = models.CharField(_('nom'), max_length=200)
    contact_groupe = models.ForeignKey('Groupe', verbose_name='Groupe', blank=True)
    contact_utilisateur = models.ForeignKey(Profile)
    ....

J'utilise la vue générique CreateViews pour créer les contacts

class ContactCreate(LoginRequiredMixin, CreateView):
      login_url = '/login/'
      model = Contact
      template_name = "contacts/create_contact.html"
      form_class = CreateContactForm
      success_url = reverse_lazy("lister_contact")

     def form_valid(self, form):
           object = form.save(commit=False)
           object.contact_utilisateur = self.request.user
           object.save()
     return super(ContactCreate, self).form_valid(form)

j'ai essayé avec la fonction get_initial pour initialiser les valeurs du champ groupe mais ca fonctionnent toujours pas.Est ce que quelqu'un a une idée.

demandé 19-Aou-2016 par elwan7 (118 points)

à quoi ressemble le form CreateContactForm ?

Dans le form j'ai le code suivant qui marche bien quand j'entre manuellement l'id de l'utilisateur mais des que je le remplace par un request.user il me dit que request n'est pas défini.

class CreateContactForm(ModelForm):
   class Meta:
    model = Contact
    fields = ('nom', 'prenom', 'contact_groupe', 'numero_telephone', 'email_address', 'photo', 'pays')
  def __init__(self, *args, **kwargs):
     super(CreateContactForm, self).__init__(*args, **kwargs)
     self.fields['contact_groupe'].queryset = Groupe.objects.filter(groupe_utilisateur=4)

1 Réponse

0 votes
 
Meilleure réponse

Dans le CreateContactForm on ferait

form.fields["group"].queryset = your_queryset

ou

form.fields["group"].choices = une_fonction
répondu 20-Aou-2016 par foxmask (2,670 points)
sélectionné 20-Aou-2016 par elwan7

Merci finalement j'ai ajouté cette fonction dans ma views pour recuper le request.user dans le formulaire et ca marche comme sur des roulettes.Merci ;-)

def get_form_kwargs(self):
    kwargs = super(CreateContact, self).get_form_kwargs()
    kwargs.update({'user': self.request.user})
    return kwargs

et dans mon forms.py

class CreateContactForm(ModelForm):
   class Meta:
       model = Contact
       fields = ('nom', 'prenom', 'contact_groupe', 'numero_telephone', 'email_address', 'photo', 'pays')
  def __init__(self, *args, **kwargs):
      self.user = kwargs.pop('user')
      super(CreateContactForm, self).__init__(*args, **kwargs)
      self.fields['contact_groupe'].queryset = Groupe.objects.filter(groupe_utilisateur=self.user)
...