Djang中的manytone关系查询

2024-06-13 07:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能告诉我,我如何才能访问与特定组相关的所有联系人吗?我是新来的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

提前谢谢!

编辑:哦,有人能告诉我如何将联系人添加到组中吗?


Tags: selfviewidreturnobjectsmodelsdefgroup
2条回答

单程:

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.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 Book来掌握这些基本知识。

您需要修改代码,如下所示:

contacts = group.contact_set.all()

有关详细信息,请参见相关的documentation

相关问题 更多 >