2016-12-19 4 views
0

Как написать представление с одной формой, чтобы добавить нового человека, и в этой же форме иметь возможность добавлять 0 или 1 или 2 или ... 68757857 изображений того же человек?Django: две формы в одном представлении

См. Приведенный ниже код.

В models.py:

class Person(models.Model): 
    name = models.CharField(max_length=50) 

class Image(models.Model): 
    person = models.ForeignKey(Person) 
    image = models.ImageField(upload_to='images/') 

В forms.py:

class PersonForm(forms.ModelForm): 
    class Meta: 
     model = Product 
     fields = ['name'] 

class ImageForm(forms.ModelForm): 
    class Meta: 
     model = Image 
     fields = ['person', 'image'] 

Из того, что я видел, используются FormSets. Я посмотрел много примеров на SO, прочитал документацию, и я все еще смущен.

Буду признателен, если кто-то может предоставить пример views.py, который соответствует спецификации в начале этого вопроса.

ответ

1

Вы можете использовать Inline formsets.

В view.py firt всего вы должны создать новый экземпляр человека, а затем использовать этот экземпляр с formset:

from django.forms import inlineformset_factory 
ImageFormSet = inlineformset_factory(Person, Image, fields=('image',)) 

def my_view(request): 
    form = PersonForm(request.POST or None) 
    if form.is_valid(): 
     new_person = form.save() 
     formset = ImageFormSet(request.POST or None, request.FILES or None, instance=new_person) 
     if formset.is_valid(): 
      formset.save() 
      return redirect('persons:main') 
    else: 
     formset = ImageFormSet(request.POST or None, request.FILES or None) 
    return render(request, 'my_template.html', {'formset': formset, 'form': form}) 

В my_template.html:

<form action="" method="post" enctype="multipart/form-data"> 
     {{ form.as_p }} 
     {{ formset.management_form }} 
     {% for frm in formset %} 
      {{ frm.as_p }} 
     {% endfor %} 
     <input type="submit" value="Create"> 
</form> 
+0

В вашем коде, если PersonForm не valid, представление не вернет объект HttpResponse. Вместо этого он вернет None. Как я могу справиться с этим делом? – Flux

+0

@Flux oops, извините, это просто ошибка с отступом. Проверьте обновленный ответ. – neverwalkaloner

+0

Но тогда, если form.is_valid() возвращает false, переменная formet не может быть определена при попытке визуализации шаблона. – Flux

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

  • Нет связанных вопросов^_^