如何在保存之前访问Django管理员更改表单模板中的模型类变量

时间:2016-07-20 22:57:09

标签: django django-admin

假设我有一个模型,其中有一个名为documentation的类变量。我想访问给定模型更改表单模板中的documentation类变量。我怎样才能做到这一点?保存实例后,我可以使用{{original.documentation}}访问模板中的类变量。

示范模型

class Person(models.Model):
    # How do I access this variable in my change form template 
    # before saving the new instace?
    documentation = "The Person model will be used for all staff including researchers, professors, and authors."

    first_name = models.CharField(max_length=255)

2 个答案:

答案 0 :(得分:1)

这可以通过更新ModelAdmin类https://docs.djangoproject.com/en/dev/ref/contrib/admin/#other-methods中的Django视图方法来完成。

def add_extra_context(model, kwargs):
        kwargs.setdefault("extra_context", {})
        kwargs["extra_context"]["documentation"] = model.__dict__.get('documentation','')


class DocumentableAdmin(admin.ModelAdmin):
    def add_view(self, *args, **kwargs):
        add_extra_context(self.model, kwargs)
        return super(DocumentableAdmin, self).add_view(*args, **kwargs)

    def changelist_view(self, *args, **kwargs):
        add_extra_context(self.model, kwargs)
        return super(DocumentableAdmin, self).changelist_view(*args, **kwargs)

    def change_view(self, *args, **kwargs):
        add_extra_context(self.model, kwargs)
        return super(DocumentableAdmin, self).change_view(*args, **kwargs)

admin.site.register(Person, DocumentableAdmin)

现在,模型中定义的文档类变量将在使用{{ documentation|safe }}可访问的更改表单管理模板中提供

答案 1 :(得分:0)

您可以使用ModelForms。创建表单并在您的视图中引用该表单,如formname = forms.formname()。他们可以使用{formname}标记显示整个表单。

最好在forms.py中操作变量而不是模板。但是,如果您希望在视图类中定义get_context_data(self, **kwargs)函数,则可以在模板中访问变量,如:

def get_context_data(self, **kwargs):
        context = super(view_name, self).get_context_data(**kwargs)
        context['model_field_list'] = Modelname.objects.get(pk=self.kwargs["modelname_pk"])
        return context

现在,您可以使用模板中的{model_field_list.fieldname}标记访问变量。在此处查看get_context_data函数的文档:documentation