合并2个表的字段作为记录集不起作用

时间:2014-01-28 02:26:21

标签: django orm django-models django-views

我有以下型号:

class Org(models.Model):
    org_id = models.AutoField(primary_key=True)
    org_name = models.CharField(max_length=45, null=False)
    org_hood = models.CharField(max_length=60, null=False)
    creation_date = models.DateField(auto_now_add=True)    

class Member(models.Model):
    member_id = models.AutoField(primary_key=True)
    user = models.OneToOneField(User)
    nick_name = models.CharField(max_length=20, null=False)
    is_self_managed = models.BooleanField(default=True)
    orgs = models.ManyToManyField(Org, through='OrgToMember', default)

以上模型通过以下模型加入:

class OrgToMember(models.Model):
    org_to_member_id = models.AutoField(primary_key=True)
    org = models.ForeignKey(Org, unique=False)
    member = models.ForeignKey(Member, unique=False)
    member_since = models.DateField(auto_now_add=True)
    balance = models.DecimalField(default=0, max_digits=19, decimal_places=2)
    is_enabled = models.BooleanField(default=True)
    is_self_managed = models.BooleanField(default=True)
    notifications = models.IntegerField(null=True)

成员在他们所在的每个组织中都有一个余额。他们可以在许多组织中,组织可以有许多成员。我试图带回一个记录列表,其中包含与特定成员相关的以下字段:

org_name balance notifications

如果我创建一个成员对象,我可以列出成员的组织,如下所示:

m = Member.objects.get(pk=2)
m.orgs.values()

这将仅返回Org模型中的字段。或者,我可以把OrgToMember中的字段带回来:

m = Member.objects.get(pk=2)
m.orgtomember_set.values()

我似乎无法合并2个模型并返回我需要的字段(org_name,balance,notifications)。我很确定它与我在模型之间创建的关系或我需要使用'select_related'函数的事实有关,但无论我尝试什么,这似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

也许你可以从OrgToMember实例开始并从那一点访问Org。您甚至不必再访问会员了,因为您需要知道的是它的pk,我认为您知道这一点。

otms = OrgToMember.objects.filter(member__pk=2)
for otm in otms:
    org_name = otm.org.org_name
    balance = otm.balance
    notifications = otm.notifications
    print org_name, balance, notifications