【问题标题】:File not uploading in Django文件未在 Django 中上传
【发布时间】:2021-05-17 10:24:56
【问题描述】:

我正在尝试将 Django 中的文件上传到模型:

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()

在媒体中,我创建了文件夹aadhar_imagespan_imagesgtsregistration。但是当我使用 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>

在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

提交表单后,文件不会上传到各自的目录。数据库中的url也显示为media/filename,但即使在媒体目录中文件也没有上传。

【问题讨论】:

    标签: python django django-forms django-file-upload


    【解决方案1】:

    .update() 方法不会将任何文件保存到存储中。您需要使用模型save 方法。也不要以这种方式使用 try-except,简单的if 就足够了,或者您可以简单地使用.get()。由于您的模型经销商与用户具有一对一的关系,您可以简单地将经销商作为user.dealer。试试这个:

    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()
    

    请注意,使用ModelForm 会更好、更容易。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多