2015-12-09 2 views
0

В простой форме, у меня есть следующие классы:Как создать поле формы из модели в Django?

class Upload(models.Model): 
    name = models.CharField() 
    groupy = models.ForeignKey('Group',null=True) 
class Group(models.Model): 
    slogan = models.CharField() 

Теперь я хочу, чтобы создать форму, которая создает объект обоих классов одновременно. До сих пор мой подход:

class GroupCreate(CreateView): 
    def get_form(self, form_class): 
    form = super(GroupCreate, self).get_form(form_class) 
    form.fields['name'] = CharField() 
    return form 
    def form_valid(self, form): 
    response  = super(GroupCreate, self).form_valid(form) 
    groupy  = form.save() 
    upload  = Upload() 
    upload.groupy = groupy 
    upload.name = form.instance.name 
    upload.save() 
    return response 
    ... 

Это прекрасно работает. Однако моя проблема заключается в том, что у меня много полей, и мне нужно будет устанавливать параметры каждого поля отдельно. Поэтому:

Как преобразовать поля в модели Загрузить в форме полей и только трубы их в форме?

ответ

0

Хорошо. Я нашел решение. Если я импортировать from django.forms.models import modelform_factory, я могу использовать его для создания полей с:

def get_form(self, form_class): 
    form = super(GroupCreate, self).get_form(form_class) 
    upload_form = modelform_factory(Upload,fields=('name',)) 

    for field in upload_form.base_fields: 
    form.fields[field] = upload_form.base_fields[field] 
    return form 

Также функция form_valid должна быть адаптирована:

def form_valid(self, form): 
    ... 
    upload.name = form.cleaned_data['name'] 
    ... 
Смежные вопросы