2017-03-24 8 views
0

これはかなり簡単なはずですが、私は本当に自分自身でそれを理解するのに苦労しています。Django:formsetに空のフォームを保存しないようにする

私は不動産アプリをやっています。私はユーザーが家の画像をアップロードできるようにする必要があります。各画像はハウスに関連し、各ハウスはユーザーに関連しています。

それは動作しますが、ユーザーがフォームセットで空のフォームを送信すると、存在しないイメージがユーザーとハウスに登録されるため、すべてが破損します。どうすればそれを防ぐことができますか?

相続人は、私の見る:より多くの潜在的な答えのように見えた

def photos_formset(request, *args, **kwargs): 
    pk = kwargs['pk'] 
    ImovelPhotosModelFormset = modelformset_factory(ImovelPhotos, form=ImovelPhotosForm) 
    formset = ImovelPhotosModelFormset(
      request.POST or None, request.FILES or None, 
      queryset = Imovel.objects.get(pk=pk).imovelphotos_set.all(), 
     ) 
    if formset.is_valid(): 
     for form in formset: 
      if not request.FILES: 
       break 
      if form.is_valid(): 
       obj = form.save(commit=False) 
       obj.user = request.user 
       obj.imovel = Imovel.objects.get(pk=pk) 
       obj.save() 
     return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk)) 

    context = { 
     "formset": formset, 
    } 
    return render(request, "imovel_photos.html", context) 

事はこれをだったが、それは私がしなければ、この何も起こらない、動作しませんでした:

if form.is_valid() and not form.empty_permitted: 

答えて

0

私が持っていましたどのフォームが空のcleaned_dataと共に来るのかを特定する。 次のコードはトリックを行いました。

if formset.is_valid(): 
     if request.FILES: 
      for form in formset: 
       if form.is_valid(): 
        if form.cleaned_data != {}: 
         obj = form.save(commit=False) 
         obj.user = request.user 
         obj.imovel = Imovel.objects.get(pk=pk) 
         obj.save() 
     return HttpResponseRedirect('/lares/{pk}/'.format(pk=pk))