简体   繁体   中英

how to upload multiple images properly

I have a simple model which has four different fileFields for uploading different files and images. this is my models:

class DocumentInfo(models.Model):
    id = models.AutoField(primary_key=True)
    certificate = models.FileField(upload_to="documents", null=True)
    id_card = models.FileField(upload_to="documents", null=True)
    service_certificate = models.FileField(upload_to="documents", null=True)
    educational_certificate = models.FileField(upload_to="documents", null=True)

users need to simply upload some images in four individual fields so, I created a simple form and passed it to views like this:

class DocumentForm(forms.ModelForm):
    class Meta:
        model = DocumentInfo
        fields = ['certificate','id_card','service_certificate','educational_certificate']

views.py:

def document_info(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            return redirect('document')
        if 'delete' in request.GET:
            return delete_item(DocumentInfo, request.GET['id'])
    else:
        form = DocumentForm()
    documents = DocumentInfo.objects.filter(user=request.user)

    context = {
        'form': form,
        'documents': documents,
    }
    return render(request, 'reg/documents.html', context)

it works just fine at first but I cant reupload anything! the uploaded image neither gets saved the second time around nor deleted. what am I doing wrong?

try this. views.py

def document_info(request):
    documents = DocumentInfo.objects.filter(user=request.user).order_by('-pk')
    if request.method == 'POST':
        if documents:
            form = DocumentForm(request.POST, request.FILES,instance=documents[0])
        else:
            form = DocumentForm(request.POST, request.FILES)
            

        if form.is_valid():
            if not documents:
                form.instance.user = request.user
            form.save()
            return redirect('document')
  
    else:
        if documents:#if the user already has a document.
            form = DocumentForm(instance=documents[0])
        else:
            form = DocumentForm()

    

    context = {
        'form': form,
        'documents': documents,
    }
    return render(request, 'reg/documents.html', context)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM