尝试在我的模型中创建一个名为stock_count
的列,该列查找我的ArrayField()
(也称为stock_list
(中的字符串对象总数。这是我的功能。
def total_stocks_calc(self):
self.stock_count = Bucket.objects.aggregate(Sum('stock_list', distinct=True))
self.save()
然而,它似乎什么都没做,没有计算,在我的模型、管理页面和DRF界面中留下空白。。。
编辑:用新的实施方式更新了帖子。
这是我的模型。
class Bucket(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='buckets')
users = models.ManyToManyField(settings.AUTH_USER_MODEL)
category = models.CharField(max_length=30, choices=category_options)
name = models.CharField(max_length=35)
created = models.DateTimeField(default=timezone.now)
slug = models.SlugField(unique=True, blank=True)
stock_count = models.IntegerField(blank=True, null=True)
stock_list = ArrayField(models.CharField(max_length=6,null=True),size=30,null=True)
about = models.CharField(max_length=75)
objects = models.Manager()
bucketobjects = BucketObjects()
class Meta:
ordering = ('-created',)
def total_stocks_calc(self):
self.stock_count = Bucket.objects.annotate(stock_count=F('stock_list__len'))
self.save()
def __unicode__(self):
return self.stock_list
想知道ArrayField()
中总项目的正确计数方法,提前谢谢。
ArrayField
提供了len
查找字段,通过该字段可以获得计数
像
from django.db.models import F
Bucket.objects.annotate(stock_count=F('stock_list__len'))