2011-06-15 64 views
1

我想製作一個應用程序,讓人們可以組成團隊一起購買物品。我需要一種方式來看看有多少人已經在購買。我有以下models.py:Django:如何計算數據庫中與另一個對象相關的對象的數量?

from django.db import models 

class Buyer(models.Model): 
    ''' Buyer of the item ''' 

    first_name = models.CharField(max_length=40) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField() 

    # Pieces together full name from first and last 
    def full_name(self): 
     return "%s %s" % self.first_name, self.last_name 

    # String representation of buyer in the format 'firstname lastname (email)' 
    def __unicode__(self): 
     return "%s (%s)" % self.full_name, self.email 

class Item(models.Model): 
    '''The item being purchased''' 

    name = models.CharField(max_length=50) 
    description = models.TextField() 
    price = models.DecimalField(max_digits=6, decimal_places=2) 
    # The number of items to be split 
    quantity = models.IntegerField() 
    pub_date = models.DateTimeField('Date Offered') 
    # Expiration of the item on offer 
    expires = models.DateField() 

    # Relates item to buyers 
    buyers = models.ManyToManyField(Buyer) 

    # Calculates remaining slots 
    def remaining(self): 
     # How do I do this? 

    # String representation of item using item name 
    def __unicode__(self): 
     return self.name 

我知道概念,我只是需要採取的數量在要約和減去購買者的數量,但我真的不知道如何做到這一點。根據我讀過的內容,似乎我可以用類似這樣的方式做到這一點:

def remaining(self): 
     return self.objects.aggregate(Count('buyers')) 

雖然我不是很有信心。任何人都可以用最好的方法幫助我嗎?

回答

1

你可以得到結果,然後指望他們:

def remaining(self): 
    return self.quantity - len(self.buyers.all()) 

實際上,更新的時候,documentation說不做這樣做,雖然它會工作,所以:

def remaining(self): 
    return self.quantity - self.buyers.all().count() 
+0

我想這似乎比應該得到的要難得多。我會嘗試這個解決方案。謝謝您的幫助! – raddevon 2011-06-16 00:31:23

+0

沒問題,祝你好運!如果您不介意,請點擊綠色複選標記。謝謝! – eruciform 2011-06-17 19:01:35

相關問題