2014-09-16 3 views
1

Как разместить поля в одной строке так же, как и для ModelAdmin.Django: Inline Form Fields in ModelForm

В классе ModelAdmin мы инициализируем fields переменную со свойствами модели класса, как:

@admin.register(Profile) 
class AdminProfile(admin.ModelAdmin): 
    fields = ['team', ('first_name', 'last_name'), 'designation', ...] 

Но это же, если я могу сделать для Meta переменной ModelForm в классе fields, то это вызывает исключение, например:

class PostsModelForm(forms.ModelForm): 
    ... 
    class Meta: 
     model = Profile 
     fields = ['team', ('first_name', 'last_name'), 'designation', ...] 

ОБНОВЛЕНО ОШИБКА: TypeError: Error when calling the metaclass bases sequence item 0: expected string or Unicode, tuple found

ответ

0

ModelForms не предоставляют какой-либо причудливый способ визуализации форм. Есть только 3 defaults methods, и они не являются гибкими. Другими словами, ModelForms в основном предназначены для построения объектов формы из экземпляров моделей, добавления некоторых правил проверки и т. Д.

И вам нужно, чтобы django-cripsy-forms.

Или вы можете render your form fields manually.

0

Я решил это сам.

Вот решение ...

Создать ModelForm подклассов

class ProfileModelForm(forms.ModelForm): 
    x_field = forms.CharField(required=True) 
    ... 
    class Meta: 
     model = Profile 
     fields = [] 
     # Initialize `fields` variable with empty list 

    def save(self, *args, **kwargs): 
     # @TODO: Extra cooking on model instance (self.instance) 
     # and self properties like `x_field` 
     return super(PostsModelForm, self).save(*args, **kwargs) 

Регистрация модели класса для администратора и создать ModelAdmin суб-класс:

@admin.register(Profile) 
class AdminProfile(admin.ModelAdmin): 
    # Assign `ProfileModelForm` to form variable 
    form = ProfileModelForm 
    ... 
    # Here initialize the `fields` variable for `Profile` model fields 
    # and `ProfileModelForm` property 
    fields = ['team', ('first_name', 'last_name'), 'designation', 'x_field', ...]