Django formset factory getting error object has no attribute save

Viewed 608

Info: I want to upload multiple files while creating new customer. I want to use formset_factory for file update. when i try to submit the form i am getting this error CustomerFileFormFormSet object has no attribute save. can anybody tell me how tell me how can i update multiple files while adding new customer in database?

models.py

class FileData(models.Model):
    """Files Model"""

    customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL, blank=True)
    title = models.CharField(max_length=100)
    file = models.FileField(upload_to='data', blank=True)

    def __str__(self):
        return self.title

views.py

def CustomerCreate(request):
    """Customer Create View"""

    customer_form = CustomerForm()
    customer_file = formset_factory(CustomerFileForm, extra=1)

    if request.method == 'POST':
        customer_form = CustomerForm(request.POST)
        formset = customer_file(request.POST, request.FILES)

        if customer_form.is_valid() and formset.is_valid():

            customer = customer_form.save(commit=False)
            customer.dealer = request.user
            customer.save()

            file = formset.save(commit=False)
            file.customer = customer
            file.save()

            return redirect('/')

    context = {
        'customer_form': customer_form,
        'formset': customer_file,
    }
    return render(request, "customer/customer-create.html", context)
1 Answers

This is the code which is work for me maybe it's good or not but it's working to save the formset_factory instance. i can use forloop for each formset and save...!

views.py


if customer_form.is_valid() and formset.is_valid():

    customer = customer_form.save(commit=False)
    customer.dealer = request.user
    customer.save()

    for form in formset:
        # extract name from each form and save
        title = form.cleaned_data.get('title')
        docs = form.cleaned_data['doc']
        file_data = FileData(title=title, doc=docs, customer=customer)
        # save file data instance
        file_data.save()
Related