我有以下型号 -
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
...
class Video(models.Model):
title = models.CharField(max_length=256)
uploaded_by = models.ForeignKey('UserProfile')
...
我想为用户拥有的视频数量添加COUNT。
目前,为了获得用户的计数,我可以profile.video_set.count()
。
我想在UserProfile模型中有一个额外的列,所以我可以UserProfile.objects.order_by('video_count')
。如何将此自定义行添加到模型中?谢谢。
答案 0 :(得分:2)
您尝试执行的操作不遵循database normalization规则。要走的路是使用注释:
UserProfile.objects.annotate(video_count=Count('video')).order_by('-video_count')
答案 1 :(得分:0)
如果您希望非常规化您的计数器,出于性能或任何其他原因,django-counter-field可让您轻松地执行此操作:
from django_counter_field import CounterField, CounterMixin, connect_counter
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
video_count = CounterField()
...
class Video(CounterMixin, models.Model):
title = models.CharField(max_length=256)
uploaded_by = models.ForeignKey('UserProfile')
...
connect_counter('video_count', Video.uploaded_by)