2014-10-06 56 views
1

使用Django ORM我想在Company上創建一個返回用戶數的方法。如何計算所有反向關係的用戶

這是我曾嘗試(見company_user_count法):

用戶模型:

class AppUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=254, 
     unique=True, 
     db_index=True, 
    ) 
    company = models.ForeignKey('Company', related_name="users") 

公司型號:

class Company(models.Model): 
    name = models.CharField(max_length=60) 


    def company_user_count(self): 
     return Company.objects.filter(users__company=self.company).annotate(user_count=Count('users')) 

上面好像又回到實際對象而不是簡單的計數(int)

回答

4
def company_user_count(self): 
    return self.users.count() 
1

您不需要編寫用於計算屬於公司的用戶的自定義方法。

只需獲取公司所有用戶並對其執行count()即可。

user_count = Company.objects.get(name='fooCompany').users.count() 
+0

事實上這並不會工作。 – 2014-10-06 15:15:33

+0

你能解釋一下爲什麼嗎? – Leistungsabfall 2014-10-06 15:17:24

+0

請參閱['get'工作原理](https://docs.djangoproject.com/en/dev/ref/models/querysets/#get) - 它與字典方法'get'不同認爲是你所瞭解的。 – 2014-10-06 15:20:53

1

試試這個:

def company_user_count(self): 
    return self.users.count() 
+0

Simon的重複答案。 – 2014-10-06 15:23:49

+0

同時發佈 – Ben 2014-10-06 15:27:32