0

Есть ли способ загрузить различные формы администратора для редактирования объектов в зависимости от того, какой объект необходимо обновить?Django различные формы для модели администратора

Например, у нас есть MPTTModelAdmin объектов. И для корневых объектов, которые мы не хотим, чтобы увидеть некоторые поля:

class RootObjectForm(ModelForm): 
    class Meta: 
     model = Author 
     exclude = ('title',) 


class ChildObjectForm(ModelForm): 
    class Meta: 
     model = Author 
     fields = ('name', 'birth_date') 

Но я не знаю, как получить поле объекта в forms.py или admin.py.

ответ

0

Вы всегда можете поставить свой собственный класс формы для класса ModelAdmin: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form

Оттуда вы можете получить доступ полей по ключу, так же, как и любая другая форма Django:

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyModeForm, self).__init__(*args, **kwargs) 

     # access whatever field by key 
     # self.fields['field-name'] 
+0

К сожалению, может быть, я чего-то не понимаю, но ниже код: из django.forms импорта ModelForm из mptt_test.models импорта Категория класс CategoryForm (ModelForm): класс Meta: модель = Категория защиту __init __ (самоповреждения, * арг, ** kwargs): супер (CategoryForm, самость) .__ Инициализационные __ (* Args, ** kwargs) печать self.fields [ 'название'] печатает: _ <Джанго .forms.fields.CharField объект в 0x7f3f0047ff90> _ И если я пытаюсь получить доступ к специальным стандартным полям MPTT, таким как _level_ (self.fields ['level']) - I geat a _KeyError_ – user2919162

+0

извините за такой уродливый формат ... 4 пробела не будут работать – user2919162

+0

Я не очень знакомый с MPTT ... у него есть Django-админ форма mixin или класс, на который должен наследоваться ModelAdmin? Это может объяснить недостающее поле. – Brandon

0

В forms.py файле вы можете получить поля объектов и их значение на двух этапах.

1: при отправке формы. чистый метод делает первоначальные проверки.

def clean(self): 
    """ validation of address form """ 
    cleaned_data = super(WebsiteAddressForm, self).clean() 
    field1_value = self.cleaned_data.get("field1") 
    print field1_value 
    return cleaned_data 

2: когда форма инициализируется. ____-it метод вызовет.

class MyForm(forms.ModelForm): 
    class Meta: 
     model = Model1 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     #self.fields['field1'] 
+0

Сделайте это ... но _print self.fields ['title'] _ prints: _ _ – user2919162

+0

, который был только для того, чтобы дать вам идею. в ____init____ вы можете инициализировать значение любого поля. self.fields ['field1'] = "Привет это значение по умолчанию" –

+0

Я вижу ... но есть ли способ получить значения полей, когда мы просто приходим на страницу для обновления существующего объекта? Например, если какой-то _news_ содержит «some_field», а значение уже установлено на «1» - в форме редактирования admin не отображаются некоторые записи этой новости. В другом случае - показать это поля – user2919162

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