Многозначный запрос в Джанго - PullRequest
1 голос
/ 11 сентября 2010

Может кто-нибудь сказать мне, как я могу получить доступ ко всем контактам, относящимся к определенной группе? Я новичок в 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 })

"группы" для чего-то другого, я пробовал с "группой" и "контактами", но получаю

'Group' object has no attribute 'contacts'

исключение.

Вот модель, которую я использую

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

Заранее спасибо!

РЕДАКТИРОВАТЬ: О, и может кто-нибудь сказать мне, как я могу добавить контакт в группу?

Ответы [ 2 ]

5 голосов
/ 11 сентября 2010

В одну сторону:

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

Другой, более нелепый, способ:

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

contact_set является значением по умолчанию related_name для отношения, как показано в связанные объекты документы .

Если вы хотите, вы можете указать свой собственный related_name, например, related_name='contacts' при определении поля, а затем вы можете сделать group.contacts.all()

Чтобы добавить новый контакт вгруппе, вам просто нужно назначить соответствующую группу для контакта через поле группы и сохранить контакт:

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() 

Похоже, вам понравится читать бесплатную книгу Django , чтобы добраться досправляется с этими основами.

3 голосов
/ 11 сентября 2010

Вам потребуется изменить ваш код, как показано ниже:

contacts = group.contact_set.all()

См. Соответствующую документацию для получения более подробной информации.

...