2016-07-20 3 views
0

Скажем, у меня есть модель, в которой у меня есть переменная класса с именем documentation. Я хочу получить доступ к переменной класса documentation в заданных моделях шаблона формы моделей. Как я могу это сделать? После сохранения экземпляра я могу получить доступ к переменной класса в шаблоне с помощью {{original.documentation}}.Как получить доступ к переменной класса модели в Django Admin Изменение формы шаблона перед сохранением

Пример Модель

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) 

ответ

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

1

Это можно сделать, обновив методы просмотра Django в классе ModelAdmin https://docs.djangoproject.com/en/dev/ref/contrib/admin/#other-methods.

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 }}

Смежные вопросы