【问题标题】:count values from manytomanyfield计算多多字段中的值
【发布时间】:2011-05-30 13:25:36
【问题描述】:

我正在尝试从一组具有多字段的对象中计算不同的值

例如

对象文章有许多标签对象的字段


一篇文章有​​标签“tag1”“tag2”

另一篇文章有​​标签“tag2”“tag3”


我想找出一些可以返回以下内容的东西:

“标签1”:1 “标签2”:2 “标签3”:1

我以为我可以用articles.objects.all().values('tags') 或其他东西做点什么,但我空了。

【问题讨论】:

  • 我通过执行 Tag.objects.filter(article__in=articles).values('name').annotate(count=Count("pk")) 找到了一种方法,但这似乎计算量很大。

标签: django manytomanyfield


【解决方案1】:

models.py

​​>
class Topping(models.Model):
        name = models.CharField(max_length = 20)

class Pizza(models.Model):
        name = models.CharField(max_length = 20)
        toppings = models.ManyToManyField(Topping)

python manage.py shell

>>> from many_to_many.models import Pizza, Topping
>>> t1 = Topping(name = "T1")
>>> t2 = Topping(name = "T2")
>>> t3 = Topping(name = "T3")
>>> t4 = Topping(name = "T4")
>>> p1 = Pizza(name="P1")
>>> p2 = Pizza(name="P2")


>>> p1.toppings.add(t1)
>>> p1.toppings.add(t2)
>>> p2.toppings.add(t2)
>>> p2.toppings.add(t3)


>>> t2.pizza_set.count() 
    2
>>> t1.pizza_set.count() 
    1

【讨论】:

    【解决方案2】:

    你的问题是相关的:How to count and display objects in relation ManyToMany in Django

    models.py

    ​​>
    class Topping(models.Model):
            name = models.CharField(max_length = 20)
    
    class Pizza(models.Model):
            name = models.CharField(max_length = 20)
            toppings = models.ManyToManyField(Topping)
    

    python manage.py shell

    >>> for topping in Topping.objects.all():
    ...     print topping.name, topping.pizza_set.count()
    

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多