Как использовать modelformset_factory с ajax-запросом - django
Я пытаюсь отправить форму с modelformset, которая загружает несколько изображений с помощью ajax, но она сохраняет только родительскую форму, а не модель formset_factory! вот что я пробовал ..
const form = document.getElementById('post-form-add-booking')
form.addEventListener("submit",submitHanler);
function submitHanler(e){
e.preventDefault();
$.ajax({
type:'POST',
url:"{% url 'booking:add_booking',
data:$("#post-form-add-booking").serialize(),
dataType:'json',
mimeType:'multipart/form-data',
success:successFunction,
error:errorFunction,
})
}
models.py
class Document(models.Model):
booking =models.ForeignKey(Booking,on_delete=models.PROTECT)
docs = models.ImageField(upload_to=upload_docs)
forms.py
class UploadDocumentsForm(forms.ModelForm):
class Meta:
model = Document
fields = ['docs']
UploadDocumentFormSet = modelformset_factory(Document,form=UploadDocumentsForm,extra=1,can_delete=True)
my views.py
def add_booking(request,room_no):
form = BookingForm(prefix='form')
images = UploadDocumentFormSet(queryset=Document.objects.none())
if request.is_Ajax() and request.method == 'POST':
form = BookingForm(request.POST,prefix='form')
images = UploadDocumentFormSet(request.POST,request.FILES)
if form.is_valid():
checkout_within_dates = None
check_in = form.cleaned_data.get('check_in')
check_out = form.cleaned_data.get('check_out')
checkin_within_dates = Q(check_in__lte=check_in) & Q(check_out__gte=check_in)
if check_out:
if check_out > check_in:
checkout_within_dates = Q(check_in__lte=check_out) & Q(check_out__gte=check_out)
if room_number.rooms.filter(checkin_within_dates | checkout_within_dates).exists():
error_message = f'taken {check_in} - {check_out}'
return JsonResponse({'success':False,'error_taken':True,'error_message':error_message},status=400)
else:
obj = form.save(commit=False)
obj.room_no = room_number
obj.admin = request.user
obj.save()
for img in images:
if img.is_valid() and img.cleaned_data !={}:
img_post = img.save(commit=False)
img_post.booking = obj
img_post.save()
success_meesage = f' {room_number.room_no} success'
return JsonResponse({'success':'success','success_msg':success_meesage})
else:
error_message=f'please make sure you the two dates are valid'
return JsonResponse({'success':False,'error_taken':True,'error_message':error_message},status=400)
return JsonResponse({'success':'success','success_msg':success_meesage})
else:
return JsonResponse({'success':'has_error','error_form_msg':form.errors,'error_formset_msg':formset.errors},status=400)
context = {'form':form,'lists':lists,'formset':formset,'room_number':room_number,
'current_booking':current_booking,'visitorformset':visitorformset,'images':images}
return render(request,'booking/add_booking.html',context)
он сохраняет только форму бронирования, есть ли что-то, что я должен изменить? или что-то для добавления изображений id меняется при нажатии на кнопку добавления изображения! id_form-0-docs
и id_form-2-docs и так далее