我有以下课程:
class Site(models.Model):
articles = models.ManyToManyField(Article, blank=True, null=True)
products = models.ManyToManyField(Product, blank=True, null=True)
class Product(models.Model):
@property
def sites_count(self):
return self.site_set.count()
在我的管理员中,我希望通过sites_count对多对多关系进行排序。
class SiteAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "articles":
kwargs['queryset'] = Article.objects.order_by('sites_count')
return super().formfield_for_manytomany(self, db_field, request, **kwargs)
我抱怨不能使用sites_count,因为它不是我的数据库中的列。
对此有何替代方法?
答案 0 :(得分:2)
您可以使用聚合和订单。
from django.db.models import Count
Article.objects.annotate(site_count=Count('site')).order_by('site_count')