django 计算模型中的实例

django count instances in a model

我有一个模型 ItemAdded 并且我发出了一个信号,因此每次用户将商品添加到购物车时,都会在 ItemAdded[= 中创建一个实例15=] 模型所以我想做的是计算添加最多的项目(按升序排列),那么最简单的方法是什么? 这是模型 :

class ItemAdded(models.Model):
user                = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE) # User instance instance.id

content_type        = models.ForeignKey(ContentType, on_delete=models.CASCADE) # User, Product, Order, Cart, Address
object_id           = models.PositiveIntegerField() # , Product id, 
content_object      = GenericForeignKey('content_type', 'object_id') # Product instance
timestamp           = models.DateTimeField(auto_now_add=True)



def __str__(self):
    return "%s added on %s" %(self.content_object, self.timestamp)

class Meta:
    ordering = ['-timestamp'] # most recent saved show up first
    verbose_name = 'Object added'
    verbose_name_plural = 'Objects addded'

如果您不关心创建单独模型和数千个数据库行的时间,您可以简单地在您的模型中创建一个 IntegerField,只要您收到您提到的信号,您就会增加它。得到结果:

models.py

class YourItemModel(models.Model)

     # YourItemModel attributes
     ...
     added_count = models.PositiveIntegerField(default=0) # yes zero is accepted

你的信号逻辑:

from django.db.models import F

instance.added_count = F(added_count) + 1
instance.save()

F 对象是首选,因为它在我们处理大量调用时消除了竞争条件。你可以阅读它here

PS 由于反向​​兼容性原因,PositiveIntegerField 接受值 0