【问题标题】:Many-To-One Relation Query in DjangoDjango中的多对一关系查询
【发布时间】:2010-09-11 11:33:16
【问题描述】:

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

提前致谢!

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

【问题讨论】:

    标签: python django exception orm foreign-key-relationship


    【解决方案1】:

    一种方式:

    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_setrelated objects docs 中所示关系的默认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 Book 来掌握这些基础知识。

    【讨论】:

      【解决方案2】:

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

      contacts = group.contact_set.all()
      

      查看相关documentation了解更多详情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 2015-10-26
        • 1970-01-01
        • 2021-03-07
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多