获取记录数量

时间:2015-12-06 20:34:08

标签: python django

我有一个抽象模型组,有2个孩子公司和邦德(我简化了我的例子)。由于我的模型WorkRelation,这些孩子与Contacts相关联。我想编写一个函数get_number_of_contacts(),它返回通过对象WorkRelation与组连接的用户数量。

这非常难,因为我使用通用外键。甚至可以在这种结构中实现这种方法吗?

这是我简化的 models.py:

class Group(BaseModel):                                                         
      name = models.CharField(max_length=30, unique=True)                         
      *** a lot more attributes ***

--->  def get_number_of_contacts(self):                                           
          return 69                                                               

      class Meta:                                                                 
          abstract = True                                                         


  class Company(Group):                                                           
      def __str__(self):                                                          
          return "Company " + self.name                                           

      class Meta:                                                                 
          app_label = 'groups'                                                    


  class Bond(Group):                                                              
      def __str__(self):                                                          
          return "Bond " + self.name                                              

      class Meta:                                                                 
          app_label = 'groups' 

 class WorkRelation(BaseModel):                                                  
      contact = models.OneToOneField(Contact, on_delete=models.CASCADE, primary_key=Tru)
      group_type = models.ForeignKey(ContentType)         
      group_id = models.PositiveIntegerField()                                    
      group = GenericForeignKey('group_type', 'group_id') 
      *** A lot more attributes ***

1 个答案:

答案 0 :(得分:0)

看起来你想要计算的实际上是特定组的WorkRelation对象的数量,这很容易:

WorkRelation.objects.filter(group=my_group).count()

由于您与联系人有一对一的关系,您也可以计算联系人,但这会以额外的数据库加入为代价得到完全相同的结果:

Contact.objects.filter(workrelation__group=my_group).count()