2015-03-10 2 views
0

Примечание: Это тесно связано с ответом на этот вопрос: django admin - add custom form fields that are not part of the modelКак вы загрузите пользовательское поле в Джанго

В Django можно создавать пользовательские ModelForms, которые имеют «румян» поля, которые ДОН 't относятся к определенному полю базы данных в любой модели.

В следующем примере кода есть настраиваемое поле, которое называется «extra_field». Он появляется на странице администратора для экземпляра модели, и к нему можно получить доступ в методе сохранения, но, похоже, не существует метода загрузки.

Как загрузить «extra_field» с данными до загрузки страницы администратора?

# admin.py 
class YourModelForm(forms.ModelForm): 
    extra_field = forms.CharField() 

    def load(..., obj): 
     # This method doesn't exist. 
     # extra_field = obj.id * random() 

    def save(self, commit=True): 
     extra_field = self.cleaned_data.get('extra_field', None) 
     return super(YourModelForm, self).save(commit=commit) 

    class Meta: 
     model = YourModel 

class YourModelAdmin(admin.ModelAdmin): 
    form = YourModelForm 
    fieldsets = (
     (None, { 
      'fields': ('name', 'description', 'extra_field',), 
     }), 
    ) 

исходный код с помощью @vishnu

ответ

2

Override __init__ метода формы и установить свойство initial поля:

class YourModelForm(forms.ModelForm): 

    extra_field = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     super(YourModelForm, self).__init__(*args, **kwargs) 
     initial = '%s*rnd' % self.instance.pk if self.instance.pk else 'new' 
     self.fields['extra_field'].initial = initial 
Смежные вопросы