如何为我的模型创建一个计算ArrayField列中字符串对象总数的函数



尝试在我的模型中创建一个名为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'))

最新更新