2

I am trying to upload a file in Django to models:

class Dealer(models.Model):
    user = models.OneToOneField(User,on_delete=models.PROTECT)
    profile = models.OneToOneField(UserProfile,on_delete=models.PROTECT)
    kyc_verified = models.BooleanField('kyc status',default=False)
    aadhar = models.FileField(upload_to='aadhar_images')
    pan = models.FileField(upload_to='pan_images')
    gts = models.FileField(upload_to='gts')
    registration = models.FileField(upload_to='registration')
    manager = models.CharField(max_length=75)
    manage_mobile = models.IntegerField()

And in media, I have created the folders aadhar_images, pan_images,gts,registration. But when I am uploading a file using the form in html:

<form method="post" action="{% url 'dealer:update' %}" enctype="multipart/form-data">
{% csrf_token %}
<br><br>
AAdhar upload :
<input type="file" name="aadhar" id="aadhar" accept="*"><br><br>
Pan upload :
<input type="file" name="pan" id="pan" accept="*"><br><br>
Gts upload :
<input type="file" name="gts" id="gts" accept="*"><br><br>
Registration upload :
<input type="file" name="registration" id="regis" accept="*"><br><br>
</form>

and in views.py:

def update(request):
    if request.method=='POST':
        user = User.objects.filter(username=request.user).values()[0]['id']
        try:
            aadhar = request.FILES['aadhar']
            print(aadhar)
            Dealer.objects.filter(user=user).update(aadhar=aadhar,kyc_verified=False)
        except:
            pass
        try:
            pan = request.FILES['pan']
            Dealer.objects.filter(user=user).update(pan=pan,kyc_verified=False)
        except:
            pass
        try:
            gts = request.FILES['gts']
            Dealer.objects.filter(user=user).update(pan=gts,kyc_verified=False)
        except:
            pass
        try:
            reg = request.FILES['registration']
            Dealer.objects.filter(user=user).update(registration=reg,kyc_verified=False)
        except:
            pass

After i submit the form, the files are not uploaded to their respective directories. Also the url in the database is showing as media/filename, but the files are not uploaded even in the media directory also.

1 Answer 1

4

The .update() method doesn't save any files into the storage. You need to use the models save method. Also don't use try-except in such a way a simple if would suffice or you can simply use .get(). Since your model Dealer has a One to One relationship with user you can simply get the dealer as user.dealer. Try this:

if request.method == 'POST':
    user = request.user # Why so much work to get what you already have even if you want id request.user.id would be enough...
    dealer = user.dealer
    if dealer:
        aadhar = request.FILES.get('aadhar')
        pan = request.FILES.get('pan')
        gts = request.FILES.get('gts')
        reg = request.FILES.get('registration')
        dealer.aadhar = aadhar
        dealer.pan = pan
        dealer.gts = gts
        dealer.reg = reg
        dealer.kyc_verified = False
        dealer.save()

As a note it would be much better and easier to use a ModelForm.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the answer. It worked. Regarding the try except code, I asked in the previous question how to modify the code here - stackoverflow.com/questions/66186206/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.