优雅的方式来计算与Django ORM的多对多关系的频率和相关性?

时间:2010-08-07 21:53:55

标签: python django django-orm

我有一个比萨模型和一个Topping模型,两者之间有多对多的关系。

你能推荐一种优雅的方式来提取:

  1. 每个人的受欢迎程度(频率) 摘心
  2. 之间的相关性 浇头(即哪些套装) 浇头是最常见的)
  3. 由于

1 个答案:

答案 0 :(得分:1)

更新:找到一种更好的方法,为连接表使用单独的模型。考虑这样的关系:

class Weapon(models.Model):
    name = models.CharField(...)

class Unit(models.Model):
    weapons = models.ManyToManyField(Weapon, through = 'Units_Weapons')

class Units_Weapons(models.Model):
    unit = models.ForeignKey(Unit)
    weapon = models.ForeignKey(Weapon)

现在你可以这样做:

from django.db.models import Count
Units_Weapons.objects.values('weapon').annotate(Count('unit'))

原始答案

我之前遇到过类似的情况。就我而言,模型是UnitWeapon。他们有很多关系。我想算一下武器的受欢迎程度。这就是我的方式:

class Weapon(models.Model):
    name = models.CharField(...)

class Unit(models.Model):
    weapons = models.ManyToManyField(Weapon)

for weapon in Weapon.objects.all():
    print "%s: %s" % (weapon.name, weapon.unit_set.count())

我认为您可以对PizzaTopping执行相同的操作。我怀疑可能还有其他(更好)的方法。