2017-03-24 3 views
0

이것은 상당히 쉬운 것이어야합니다. 그러나 저는 정말로 자신을 알아 내기 위해 고심하고 있습니다.Django : formset에 빈 폼을 저장하는 것을 막으십시오.

부동산 응용 프로그램을 만들고있어 사용자가 주택 이미지를 업로드 할 수 있어야합니다. 각 이미지는 하우스와 관련이 있으며 각 하우스는 사용자와 관련이 있습니다.

작동 방식은 사용자가 내 양식 세트를 사용하여 빈 양식을 제출하면 존재하지 않는 이미지를 사용자 및 하우스에 등록하기 때문에 모든 것이 손상됩니다. 어떻게 방지 할 수 있습니까?

Heres는 내보기 : 더 잠재적 인 대답처럼 보였다

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))