2016-02-26 2 views
3

Я вручную показываю свой набор форм как таблицу, причем каждая форма зацикливается. В нижней части каждой формы I включает скрытые поля, такие как:django modelform property скрытое поле

{% for hidden in form.hidden_fields %} 
    {{ hidden }} 
{% endfor %} 

Но проблема в том, что я также включая свойство в моей форме, как:

class AllocationForm(forms.ModelForm): 
    name = forms.CharField(widget=forms.TextInput(attrs={'size': '15'})) 

    def __init__(self, *args, **kwargs): 
     super(AllocationForm, self).__init__(*args, **kwargs) 
     if self.instance: 
      self.fields['total_budgeted'] = self.instance.total_budgeted() 
      self.fields['total_budgeted_account_percent'] = self.instance.total_budgeted_account_percent() 
      self.fields['actual_spent'] = self.instance.actual_spent() 
      self.fields['actual_spent_account_percent'] = self.instance.actual_spent_account_percent() 
      self.fields['total_budgeted_category_percent'] = self.instance.total_budgeted_category_percent() 
      self.fields['actual_spent_category_percent'] = self.instance.actual_spent_category_percent() 

    class Meta: 
     model = Allocation 
     exclude = {'created', 'modified', 'source_account'} 

И это работает в том смысле, что я определенно увидеть вызываемые свойства, однако они отображаются как ничто, так что это еще одна проблема.

Проблема заключается в том, когда я сохраняю скрытые поля в шаблоне, я получаю такие ошибки, как объект «int», не имеет атрибута «get_bound_field» и т. Д. В зависимости от типа возвращаемого вызова свойства/метода.

Мой вопрос: first: есть ли проверка, которую я могу сделать, чтобы увидеть, является ли поле свойством в шаблоне и, следовательно, пропустить его? Возможно, это связано с тем, как я использую свойство, поскольку на самом деле каждое свойство ничего не отображает (но я вижу его обратный вызов), поэтому второй будет о том, как отображать свойства.

ответ

4

Ну, я нахожусь на следующем этапе проблемы, но у меня есть успех в создании полей истинной формы. На месте:

if self.instance: 
    self.fields['total_budgeted'] = self.instance.total_budgeted() 

Вы можете написать:

if self.instance: 
    self.fields['total_budgeted'] = form.CharField(
     initial=self.instance.total_budgeted(), 
     widget=HiddenInput() 
    ) 

В этом коде вы я создаю экземпляр полевую форму, как CharField, вы можете использовать поле формы вы хотите, и я прячу его, выбирая скрытые входной виджет.

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