Skip to main content
 首页 » 编程设计

python之Django 中的多对一关系查询

2025年05月04日28telwanggs

谁能告诉我,我怎样才能访问与特定组相关的所有联系人?我是 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 }) 

“groups”是不同的东西,我用“group”和“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 

提前致谢!

编辑:哦,谁能告诉我如何向群组添加联系人?

请您参考如下方法:

一种方式:

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 objects docs 中所示.

如果你愿意,你可以在定义字段时指定你自己的related_name,比如related_name='contacts' 然后你可以做group。联系人.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 Book掌握这些基础知识。