计算模型的外来对象

时间:2013-06-01 13:14:25

标签: django django-models django-orm

我在Django应用程序中有以下模型(简化):

class Company(BaseModel):
    user = models.OneToOneField(User)
    title = models.CharField(max_length=128)

class Event(BaseModel):
    company= models.ForeignKey(Company)
    description = models.TextField(verbose_name="Description", blank=True,null=True,max_length=200,default="")

在我的一个视图中,我想为已登录用户“拥有”的公司计算事件对象。 访问公司对象我使用像request.user.company

这样的东西

如何统计与单个公司相关的所有事件对象?

编辑:

我想我问的是错误的问题。我想做的事: 我选择单个事件对象:

event = Event.objects.get(uuid=event_uuid)

现在我想获得一些事件但在单个公司内,而不是全局ID。

1 个答案:

答案 0 :(得分:2)

我发现您的问题很难理解,您是否希望将Event与给定的Company相关联?

c = Company.objects.get(...)
event_n = Event.objects.filter(company=c).count()

n = 2
event_n = Event.objects.filter(company__pk=n).count()

u = User.objects.get(...)
event_n = Event.objects.filter(company__user=u).count()

您想收集一个(某些)公司(公司),其中Event的数量相关联吗?

from django.db.models import Count
company = Company.objects.filter(pk=n).annotate(event_n=Count('event')).get()
print company.event_n

companies = Company.objects.filter(...).annotate(event_n=Count('event'))
for c in companies:
    print c.event_n

如果您已经有一个活动,并且您想要与其公司关联的活动数量,您可以尝试

e = Event.objects.get(...)
event_n = Event.objects.filter(company=e.company).count()

n = 3
e = Event.objects.filter(pk=n).annotate(event_n=Count('company__event')).get()
print e.event_n