0

Django - 在多对多关系中使用计数进行注释

我无法找到使用元素在多对多关系中使用次数的计数来注释查询集的方法。

class Profile(models.Model):
    [...]
    # Profile can have multiple roles
    roles = models.ManyToManyField('Role', blank=True)
    [...]

class Role(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(blank=True, max_length=30)
    description = models.CharField(blank=True, max_length=300)
    [...] 

例如,我将有 5 个角色:

  • 角色1
  • 角色2
  • 角色3
  • 角色4
  • 角色5

并分配了以下角色的 2 个配置文件:

  • 简介1
    • 角色 1
    • 角色 2
  • 简介2
    • 角色 1
    • 角色 3
    • 角色 4

我需要与@ha-duy 相反:

Profile: name, role_count=2
Profile: name, role_count=3

有任何想法吗?

谢谢!

4

1 回答 1

1

一个想法:

在同一个视图中,您通过多对多字段更新滚动循环并返回长度。然后适当地更新模型。

更好的主意:

为配置文件模型创建自定义保存方法,以便每次调用 .save() 时都会计算角色数量并更新该字段。更多信息在这里。 模型上的自定义保存方法 - django

也许这会有所帮助,因为它不会在数据库中持久存在,但会为您提供信息:

class Test(models.Model):
name = models.CharField(max_length=10,)
category = models.ManyToManyField(cats)

def __str__(self):
    x = self.category.all()
    y = len(x) 
    return 'this is an item count ' + str(y)

或者如果你想要它以对象形式:

将此添加到模型中。

    def dataBlock(self):
       x = self.category.all()
       y = len(x) 
       return {
           'name': self.name,
           'cat_length': y,
       }
于 2019-11-16T22:02:25.887 回答