Python 类型错误:';相关经理';对象是不可编辑的
德扬戈 我有以下型号:Python 类型错误:';相关经理';对象是不可编辑的,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,德扬戈 我有以下型号: class Group(models.Model): name = models.CharField(max_length=100) parent_group = models.ManyToManyField("self", blank=True) def __unicode__(self): return self.name class Block(models.Model): name = models.Char
class Group(models.Model):
name = models.CharField(max_length=100)
parent_group = models.ManyToManyField("self", blank=True)
def __unicode__(self):
return self.name
class Block(models.Model):
name = models.CharField(max_length=100)
app = models.CharField(max_length=100)
group = models.ForeignKey(Group)
def __unicode__(self):
return self.name
比如说,blockb1有g1组。根据它的名称,我想从组g1中获取所有块。我编写了下一个递归函数:
def get_blocks(group):
def get_needed_blocks(group):
for block in group.block_set:
blocks.append(block)
if group.parent_group is not None:
get_needed_blocks(group.parent_group)
blocks = []
get_needed_blocks(group)
return blocks
但是b1.group.block_set返回我RelatedManager对象,这是不可编辑的
怎么办?怎么了?试试这个:
block in group.block_set.all()
使用它。如果需要所有对象,则调用all()
方法。必须使用.all()和相关名称或父模型
在views.py中使用:
for item in object.relatedname.all():
do something ......
在html模板中使用:
{% for item in object.relatedname.all %}
do something ......
{% endfor %}
有人知道为什么RelatedManager不能胜任吗?我本以为会是这样的……这个评论有点晚了,但原因是您可以在管理器上使用过滤方法,以便在对db执行提取之前限制查询。@stalepretzel,因为它完全像标准的django管理器一样工作。您不需要调用Model.objects并对其进行迭代。调用Model.objects.all()然后进行迭代。Django manager=/=Django queryset。如果您在循环的模板中使用它,您可以在objects.other_object_set.all%}@stalepretzel中为objects.other_object_set.all%}执行{%操作,特别是因为它被称为“blocks_set”,而不是“blocks_relatedmanager”。或“块集相关管理器”。