2010-09-11 7 views
1

Quelqu'un peut-il me dire comment accéder à tous les contacts relatifs à un groupe spécifique? Je suis nouveau à Django et ce ne (selon la docs):Requête de relation many-to-one à Django

def view_group(request, group_id): 
    groups = Group.objects.all() 
    group = Group.objects.get(pk=group_id) 
    contacts = group.contacts.all() 
    return render_to_response('manage/view_group.html', { 'groups' : groups, 'group' : group, 'contacts' : contacts }) 

« groupes » est quelque chose de différent, je l'ai essayé avec « groupe » et « contacts » mais obtenir un

'Group' object has no attribute 'contacts' 

exception.

Voici le modèle que je utilise

from django.db import models 

# Create your models here. 

class Group(models.Model): 
    name = models.CharField(max_length=255) 
    def __unicode__(self): 
      return self.name 

class Contact(models.Model): 
    group = models.ForeignKey(Group) 
    forname = models.CharField(max_length=255) 
    surname = models.CharField(max_length=255) 
    company = models.CharField(max_length=255) 
    address = models.CharField(max_length=255) 
    zip = models.CharField(max_length=255) 
    city = models.CharField(max_length=255) 
    tel = models.CharField(max_length=255) 
    fax = models.CharField(max_length=255) 
    email = models.CharField(max_length=255) 
    url = models.CharField(max_length=255) 
    salutation = models.CharField(max_length=255) 
    title = models.CharField(max_length=255) 
    note = models.TextField() 
    def __unicode__(self): 
      return self.surname 

Merci à l'avance!

EDIT: Oh, quelqu'un peut-il me dire comment ajouter un contact à un groupe?

Répondre

5

Une façon:

group = Group.objects.get(pk=group_id) 
contacts_in_group = Contact.objects.filter(group=group) 

Une autre, plus idiomatiques, chemin:

group = Group.objects.get(pk=group_id) 
contacts_in_group = group.contact_set.all() 

contact_set est la valeur par défaut related_name pour la relation comme indiqué dans le related objects docs.

Si vous voulez, vous pouvez spécifier votre propre related_name, comme related_name='contacts' lors de la définition du champ et que vous pourriez faire group.contacts.all()

Pour ajouter un nouveau contact à un groupe, il vous suffit d'assigner le groupe concerné à contacter via le champ de groupe et enregistrer le contact:

the_group = Group.objects.get(pk=the_group_id) 
newcontact = Contact() 
...fill in various details of your Contact here... 
newcontact.group = the_group 
newcontact.save() 

on dirait que vous apprécieriez la lecture du Django Book libre de se familiariser avec ces fondamentaux.

+0

merci beaucoup! – Tronic

3

Vous devez modifier votre code comme indiqué ci-dessous:

contacts = group.contact_set.all() 

Voir la documentation pertinente pour plus de détails.