如何为recursetree模板标记向Django MPTT模型添加自定义数据

2024-04-27 22:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这个关于MPTT对象和{%recursetree%}模板标记用法的问题与this one有关。在

我的Django型号:

from mptt.models import MPTTModel, TreeForeignKey
class myModel(MPTTModel):
    myIntA = models.IntegerField(default=0)   
    myParent = TreeForeignKey('self', null=True, blank=True, related_name='children')

我的观点:

^{pr2}$

以上是否合法?您可以看到,我向每个myModel对象添加了一个变量myIntB。 但是,当我尝试在下面的模板中打印myIntB时,没有显示任何内容。在

如何从模板访问myIntB?它不是我为这个模型定义的一个字段,我也不希望它是。我只想在呈现这个特定模板的过程中用这个额外的变量来扩充myModel。问题是,对于recursetree模板标记,我看不到要这样做。在

我的模板:

{% load mptt_tags %}
<ul>
    {% recursetree nodes %}
        <li>
            {{node.id}} {{node.myIntA} {{node.myIntB}}
            {% if not node.is_leaf_node %}
                <ul>
                    {{ children }}
                </ul>
            {% endif %}
        </li>
    {% endrecursetree %}
</ul>

Tags: 对象标记模板nodetruemodelsulmptt
1条回答
网友
1楼 · 发布于 2024-04-27 22:15:04

recursetree标记调用查询集上的.order_byif it's actually a queryset.

这将复制查询集,执行另一个查询并从数据库中重新获取所有对象。新对象上不再存在额外属性。在

解决此问题最简单的方法可能是在将查询集传递给recursetree之前,先调用它。然后mptt将假定排序已经完成,并且不会重新排序queryset。在

myModelList = list(myModel.objects.order_by('tree_id', 'lft'))
for i, obj in enumerate(myModelList):
    obj.myIntB = i

return render(
    request, 
    'myApp/myTemplate.html', 
    Context({"myModels": myModelList})
)

相关问题 更多 >