从模板调用模型函数

时间:2013-07-28 06:44:58

标签: python django django-templates

我正在尝试覆盖change_form.html管理模板。当我在管理区域中输入数据时,它会帮助我从CSV文件中看到几行我输入的数据。

所以,在我的change_form.html副本中,我放置了:

<!-- First three lines of the csv we're parsing. -->
foo: {{ csv_app.csv_sample }}
<!-- end -->

在我的模型中(“csv_profile”):

def csv_sample(self):
    return "foo"

我已经尝试将csv_app.csv_sample更改为parse_csv.csv_app.csv_sample以及其他一些东西 - 但我没有得到任何结果。很明显,我没有做到这一点 - 任何人都可以发现我所缺少的东西吗?

1 个答案:

答案 0 :(得分:1)

change_form.html用于创建新对象和更新现有对象,因此您需要确保仅显示现有对象的字段。

更便携的方法是编写一个快速模板标记,然后从模板中传递object_id变量。

标签可以是:

from django import template

from csv_app.models import csv_profile

register = template.Library()

@register.inclusion_tag('_tag_csv_preview.html')
def csv_preview(pk):
    csv = csv_profile.get(pk=pk)
    return {'preview': csv.csv_sample()}

_tag_csv_preview.html模板只包含{{ prevew }}(或您想要的任何其他样式)。

然后在change_form.html

{% load csv_app.tags %}
{% if object_id %}
    {% csv_preview object_id %}
{% endif %}

你也可以使用另一种技巧 - 这更简单。 adminform.form.instance将表示正在为其呈现表单的实例,然后执行此操作:

{% if adminform.form.instance %}
   {{ adminform.form.instance.csv_sample }}
{% endif %}