Django:如何计算与数据库中其他对象相关的对象数?

2024-06-02 04:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提出一个申请,允许人们组成团体一起购买物品。我想知道有多少人已经在买了。我有以下型号.py:

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'))

不过,我不太自信。有谁能帮我找到最好的方法吗?


Tags: ofthenameselfreturnmodelsemaildef
1条回答
网友
1楼 · 发布于 2024-06-02 04:21:07

你只需得到结果,然后数一数:

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

实际上,要更新,documentation说不要这样做,尽管它会起作用,所以:

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

相关问题 更多 >