Элегантный способ подсчитать частоту и соотношение отношений многие ко многим с Django ORM? - PullRequest
1 голос
/ 08 августа 2010

У меня есть модель «Пицца» и модель «Топпинг», между которыми существует отношение «многие ко многим».

Можете ли вы порекомендовать элегантный способ извлечения:

  1. популярность (частота) каждого долива
  2. корреляция между начинки (то есть, какие наборы начинки самые частые)

Спасибо

1 Ответ

1 голос
/ 08 августа 2010

Обновление : Нашел лучший способ, используя отдельную модель для таблицы соединений. Рассмотрим такие отношения:

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'))

Оригинальный ответ :

Я сталкивался с подобной ситуацией раньше. В моем случае модели были Unit и Weapon. У них было много ко многим отношениям. Я хотел посчитать популярность оружия. Вот как я это сделал:

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())

Я думаю, вы можете сделать то же самое для Pizza и Topping. Я подозреваю, что могут быть другие (лучшие) способы сделать это.

...