如何在django中上传csv文件的函数中使用外键连接模型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django中上传csv文件的函数中使用外键连接模型?相关的知识,希望对你有一定的参考价值。

我有一个django网络应用程序,我希望用户以csv的形式上传他们的数据。我创建了一个函数和一个用户上传csv的页面,我已将用户附加到模型中,但我希望该用户成为每个文件的外键。从我所看到的,数据正在数据库中输入就好但我不认为它与外键正确连接,因为在分析数据库时它说没有连接外键,只是输入了值什么都没有关系。

这是我的功能:

def upload_batch(request):
    template_name = 'classroom/teachers/upload.html'
    prompt = {'order':'Order of csv should be first_name, last_name, email, ip_address, message'}
    if request.method == "GET":
        return render(request,template_name,prompt)

    csv_file = request.FILES['file']
    data_set = csv_file.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    next(io_string)


    uploaded_by = request.user


    for column in csv.reader(io_string,delimiter=',',quotechar='|'):
        _, created = ItemBatch.objects.update_or_create(
            name = column[0],
            pid = column[1],
            quantity = column[2],
            length = column[3],
            width = column[4],
            height = column[5],
            volume = column[6],
            weight = column[7],
            uploaded_by = uploaded_by
        )


    context = {}
    return render(request,template_name,context)

这是我的模型:

# item upload
class ItemBatch(models.Model):

    # uploaded_by = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='uploaded_by')

    uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_by')

    name = models.CharField(max_length=30)
    pid = models.CharField(max_length=30)
    quantity = models.CharField(max_length=30)
    length = models.CharField(max_length=100, blank=True)
    width = models.CharField(max_length=100, blank=True)
    height = models.CharField(max_length=100, blank=True)
    volume = models.CharField(max_length=100, blank=True)
    weight = models.CharField(max_length=100, blank=True)

    def __str__ (self):
        return self.name

更新:这是我的数据库中模型的屏幕截图。正如您所看到的,uploaded_by没有显示为外键,就像它在其他工作模型中显示一样。

我在数据库中的模型:1

外键选项卡为空。 1

我与FK的另一个工作模型。 3

答案

代码和模型看起来很好。您过去是否对模型进行了一些更改(并运行了makemigrationsmigrate)?根据你的截图,该表没有外键约束,这很奇怪,因为它似乎正确填充。您是否刷新/同步工具中的架构?

以上是关于如何在django中上传csv文件的函数中使用外键连接模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django 为文件列表中的每个文件创建外键集

如何从 Django 视图中获取价值到 Ajax 成功函数中

使用 django-import-export 在 django 迁移中的外键

加快 Django 表单以将大型(500k obs)CSV 文件上传到 MySQL 数据库

MultiValueKeyDictError Django同时上传csv文件

外键与用户模型上传一起使用