2014-01-28 2 views
1

У меня есть следующие модели:Объединение полей 2 таблиц, записей не работает

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 

Если я создаю объект члена, я могу перечислить Orgs для члена, как так:

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

Это вернет только поля в модели Org. Или я могу вернуть поля в OrgToMember так:

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

Я не могу показаться, чтобы объединить 2 модели и вернуть поля мне нужно (ORG_NAME, баланс, уведомления). Я уверен, что это имеет какое-то отношение к отношениям, которые я создал между моими моделями, или к тому факту, что мне нужно использовать функцию «select_related», но это не работает независимо от того, что я пытаюсь сделать.

ответ

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 
+0

Это сделало трюк! – Progger

Смежные вопросы