2017-05-24 15 views
0

添付する画像を最大5つ持つフォームセットを作成しました。Django Formsetに必須フィールドとオプションフィールドが必要です

1からが、私は検証は、ユーザーが任意の画像(ValidationError('atleast 1 image is required'))を添付していないときにのみ実行したい、

2 -このプログラムはまた、とき1、または2ユーザーが保存できるようにされていません、私は本当に必要な3つの画像が添付されています。画像が1枚ある場合や2枚の場合は、それを保存する必要があります。私はまた、テンプレート

テンプレート

<form enctype="multipart/form-data" action="" method="post"> {% csrf_token %} 

{% for hidden in form.hidden_fields %} 
    {{ hidden }} 
{% endfor %} 

{{ form.as_p }} 

{{ formset.management_form }} 
<div class="link-formset"> 

{% for choice in formset %} 
<div> 
    <label>{{ choice.media }}</label> 
    <input type="radio" name="featured">{{choice.featured_image.label }} 
</div> 
{% endfor %} 
</div> 

<input type="submit" value="{{ submit_btn }}"> 
</form> 

形でdispalyed 1であることを選択した画像を作るために、デフォルトで選択される1つのラジオボタンを作成する必要があり -

3 .py

class ProductImagesForm(forms.ModelForm): 
    media = forms.ImageField(label='Image', required=True) 
    featured_image = forms.BooleanField(initial=True, required=True) 
class Meta: 
     model = ProductImages 
     fields = ['media', 'featured_image'] 

ImagesFormset = modelformset_factory(ProductImages, fields=('media', 'featured_image'), extra=5) 

views.py

def form_invalid(self, form, formset): 
     return self.render_to_response(self.get_context_data(form=form, formset=formset)) 

    def form_valid(self, form, formset): 
     return HttpResponseRedirect(self.get_success_url()) 

    def get(self, *args, **kwargs): 
     self.object = None 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     formset = ImagesFormset(queryset=ProductImages.objects.none()) 
     return self.render_to_response(self.get_context_data(form=form, formset=formset)) 

    def post(self, request, *args, **kwargs): 
     self.object = None 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     formset = ImagesFormset(self.request.POST, self.request.FILES or None) 
     form_valid = form.is_valid() 
     formset_valid = formset.is_valid() 
     if (form.is_valid() and formset.is_valid()): 
      seller = self.get_account() 
      form.instance.seller = seller 
      self.object = form.save() 
      images_set = formset.save(commit=False) 
      for img in images_set: 
       img.product = self.object 
       img.save() 
      formset.save() 
      return self.form_valid(form, formset) 
     else: 
      return self.form_invalid(form, formset) 

答えて

0

あなたはいつもこれは私がそうしてきた少なくとも1枚の画像および最大5

+0

があることを確認しますが、そこにあるとき、まだそれが保存されますmodelformset_factory

ImagesFormset = modelformset_factory(ProductImages, fields=('media', 'featured_image'), min_num=1, max_num=5, extra=5) 

min_nummax_numに渡すことができます画像が添付されていません – dungu

+0

ビューでフォームセットを検証していますか? –

+0

ええ、上記のviews.pyで私の検証を見ることができます – dungu

関連する問題