SAI SANTOSH CHIRAG
SAI SANTOSH CHIRAG

Reputation: 2084

File not uploading in Django

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.

Upvotes: 2

Views: 802

Answers (1)

Abdul Aziz Barkat
Abdul Aziz Barkat

Reputation: 21787

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.

Upvotes: 4

Related Questions