2011-03-29 72 views
1

我想计算与另一个对象具有外键关系的对象的数量,以及哪个标记被删除= 0。在Django中计算并附加过滤的相关对象

User的必须在模型Accounts一个外键关系:

class Account(models.Model): 
    ... 
    def __unicode__(self): 
     return self.organisation 

class User(models.Model): 
    ... 
    account = models.ForeignKey("Account", null=True, blank=True) 
    deleted = models.BooleanField(blank=False) 

views,为每个帐户我想显示谁是连接到该帐户的用户数,这也有删除= 0。

这是我能做的最好的:

@login_required 
def accounts(request): 
    try: 
     accounts = Account.objects.all().filter(deleted=0) 
     users = User.objects.all().filter(deleted=0) 
    except: 
     raise Http404 

    account_users = {'a':'a'} 
    for account in accounts: 
     account_users[account.id] = User.objects.all().filter(deleted=0).filter(account = account.id) 

    variables = RequestContext(request, { 
    'accounts':accounts, 
    'users':users, 
    'account_users':account_users, 
    }) 
    return render_to_response('accounts/accounts.html', variables) 

在上面,我使用它包含account.id =>non-deleted user count字典。这个问题是我无法迭代模板中的字典键...

感谢您的任何帮助。

回答

1

要重复字典使用items()方法。它通过(键,值)对返回一个迭代器。

for k, v in dictionary.items(): 
    do_something_with(k,v) 
+0

谢谢。我尝试了{%for key,value in account_users.items%} {{value.count}} {%endfor%},但是我需要在{%for account in accounts%}之类的列表中进行迭代...... { %endfor%}我是否需要将计数附加到queryset来执行此操作?谢谢 – eli 2011-03-29 11:14:01

+0

解决。我加入{%如果%}有条件其中仅打印的值,如果键匹配列表可迭代:{%为键,在account_users.items%值} \t \t {%如果key = account.id%} \t \t \t \t {{value.count}} \t \t {%endif%} \t {%endfor%} – eli 2011-03-29 11:16:20