Django - 多文件上传数据未插入模型数据库

Posted

技术标签:

【中文标题】Django - 多文件上传数据未插入模型数据库【英文标题】:Django - Multiple File upload data not inserted in model database 【发布时间】:2021-07-28 01:12:18 【问题描述】:

我已经实现了为每个 RetailerMaster 上传多个文件的功能(作为外键)。 一旦我将此模型迁移到 microsoft sql server,就会创建 FileUpload 模型而没有 django 应该自动创建的主键。另外,如果我上传多个文件,那么数据库中只会创建一条记录,并且它会为每个文件不断更新。

models.py

class RetailerMaster(models.Model):
    id = models.PositiveIntegerField(unique=True)
    name = models.CharField(max_length=1000)
    address = models.CharField(max_length=4000)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    pincode = models.CharField(max_length=100)
    contact_name = models.CharField(max_length=500)
    email = models.EmailField()
    phone = models.CharField(max_length=15)
    erp = models.CharField(max_length=1000)
    remark = models.CharField(max_length=4000)

    def __str__(self):
        return self.id

class FileUpload(models.Model):
    retailer = models.ForeignKey(RetailerMaster, on_delete=models.CASCADE),
    file = models.FileField(upload_to='files')
    file_upload_datetime = models.DateTimeField()
    file_name = models.CharField(max_length=1000)

views.py

retailer = RetailerMaster.objects.get(retailer_id=retailer_id)
register_complete = retailer

files = request.FILES.getlist('file')
file_upload_datetime = file_upload_form.cleaned_data['file_upload_datetime']
for f in files:
    print(f.name)
    file_instance = FileUpload(register_complete.id,f,file_upload_datetime,f.name)    
    file_instance.save()

迁移文件

migrations.CreateModel(
    name='FileUpload',
    fields=[
        ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
        ('file', models.FileField(upload_to='files')),
        ('file_upload_datetime', models.DateTimeField()),
        ('file_name', models.CharField(max_length=1000)),
    ],
)

为什么迁移文件没有外键?

模板文件

<div id="registrationForm">
  <form
    action="% url 'retail_forms:file-upload' %"
    method="post"
    enctype="multipart/form-data"
  >
    % csrf_token %  retailer_registration_form|crispy   file_upload_form|crispy 
    <input type="submit" value="Register" class="btn btn-primary" />
  </form>
</div>

例如: 如果上传了 001.xlsx 和 002.xlsx 两个文件,则数据库中会发生以下情况。实际结果是插入一条记录而不是两条记录,并且使用从多个文件上传的最后一个文件更新相同的记录。

谁能帮忙解释一下为什么记录没有插入而只是更新了。

【问题讨论】:

请也添加您的模板代码 @hakim13or - 添加模板代码 【参考方案1】:

通过删除 FileUpload 模型中外键的​​尾随逗号来解决问题。

django - Foreign key not getting created from model

【讨论】:

以上是关于Django - 多文件上传数据未插入模型数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中处理未保存的多对多关系?

Django Tastypie 反序列化多部分/表单数据以上传文件

多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot

C# Winform 多线程 SOCKET 文件上传,下载

秒懂Django模型(数据库)关系(学习系列六)

在 Django 中插入多对多对象的正确方法?