Python Django:追加多个对象实例的计数,然后在模板中检索它

Python Django:追加多个对象实例的计数,然后在模板中检索它,python,django,dictionary,append,many-to-many,Python,Django,Dictionary,Append,Many To Many,好的,所以我确定我在这里犯了一个简单的错误,但我不知道在这一点上可能是什么,或者从哪里开始寻找失败的原因 我有5个模型,设置如下: class Keyword(models.Model): key = models.CharField(max_length=2000, unique=True) def __str__(self): return self.key class Entries(models.Model): name = models.Ch

好的,所以我确定我在这里犯了一个简单的错误,但我不知道在这一点上可能是什么,或者从哪里开始寻找失败的原因

我有5个模型,设置如下:

class Keyword(models.Model):
    key = models.CharField(max_length=2000, unique=True)

    def __str__(self):
        return self.key

class Entries(models.Model):
    name = models.CharField("Name", max_length=200)
    updated = models.DateTimeField("Last Updated", auto_now=True)
    key_list = models.ManyToManyField(Keyword, blank=True, verbose_name="Keywords")
    description = models.TextField("Description", blank=True)

    class Meta:
        abstract = True    

class Employee(Entries):
    uid= models.SlugField("UserID", max_length=6, unique=True, blank=True)
    manager = models.SlugField("Manager's UserID", max_length=6)

    def __str__(self):
        return self.name

class Vendor(Entries):
    company = models.CharField("Vendor Company", max_length=200)
    email = models.EmailField("Vendor's Company Email Address", max_length=254, unique=True)
    vend_man_name = models.CharField("Manager's Name", max_length=200)
    vend_man_email = models.EmailField("Manager's Email Address", max_length=254)

    def __str__(self):
        return self.name

class Application(Entries):
    app_url = models.URLField("Application URL", max_length=800, unique=True)

    def __str__(self):
        return self.name

class Machine(Entries):
    address = models.CharField("Machine Address", max_length=800, unique=True)
    phys_loc = models.TextField("Physical Location", blank=True)

    def __str__(self):
        return self.name
因此,显示数据的templatetag是:

@register.inclusion_tag('Labswho/key_cloud.html')
def key_cloud(keys_selected=''):
    key_list = Keyword.objects.all()
    for entry in key_list:
        counter = Keyword.objects.filter(employee__key_list__key__contains=entry).distinct().count()
        counter += Keyword.objects.filter(vendor__key_list__key__contains=entry).distinct().count()
        counter += Keyword.objects.filter(application__key_list__key__contains=entry).distinct().count()
        counter += Keyword.objects.filter(machine__key_list__key__contains=entry).distinct().count()
        entry.append({'counter': counter})
    context = {'key_list': key_list}
    return context
但它总是给我带来错误

我希望它做的是获取每个模型上每个关键字的实例数,将这些实例添加到一起,然后给我一个可以在模板中引用的数字。我的最终目标是,我可以使用这个数字来设置字体大小,这样使用频率较高的关键字会明显大于使用频率较低的关键字。我想我想要的是在我的关键字列表的每个条目中设置一个字典,然后在设置字体大小时,我可以在模板中调用该数字。不知道我是否把这件事复杂化了,或者如何在这一点上修复它,使它真正工作


(这使用的是Python 3.5和Django 1.10)

请添加错误消息,包括对您的问题的回溯。因此,您只需要计数,而不是对这些项目的引用,对吗?我猜您是因为尝试附加到entry对象而不是将值计数器分配给它而出错了
entry.counter=counter
还有其他问题。所选参数未使用。即使改变了这一点,这也不是向条目添加计数的好方法。基于当前的逻辑,我不太确定这个模板标记的目标是什么,但至少应该考虑使用Q对象:@KlausD关键字“object没有属性”“append”是我遇到的错误getting@AaronHampton看,我知道这将是一件愚蠢而简单的事情,我错过了…entry.counter=counter实际上正是我所需要的。非常感谢。我不确定如何在这里使用q对象来更好地实现这一点,是否可以在此基础上进行扩展?我的印象是,既然我引用了多个模型,我就需要这样做。您链接的文档中的所有示例似乎都指向这一点,但如果您知道更好的方法,我洗耳恭听。选择的关键点是我稍后将在下一部分中使用的,因为我已经完成了其余部分的工作,我并不打算将其包括在内。