gpt4 book ai didi

django - 如何从 Excel 文件填充 django Manytomany 数据库

转载 作者:行者123 更新时间:2023-12-01 17:46:49 25 4
gpt4 key购买 nike

我正在尝试将数据从 Excel 文件传输到 sqlite3 数据库中的多位表中。

模型.py

from django.db import models


class Major(models.Model):
name = models.CharField(max_length=30, db_index=True)

class School(models.Model):
name = models.CharField(max_length=50, db_index=True)
majors = models.ManyToManyField(Major)


class professor(models.Model):
ProfessorIDS = models.IntegerField()
ProfessorName = models.CharField(max_length=100)
ProfessorRating = models.DecimalField(decimal_places=2,max_digits=4)
NumberofRatings = models.CharField(max_length=50)
#delete major from the model
school = models.ForeignKey(School , on_delete=models.CASCADE)
major = models.ForeignKey(Major , on_delete=models.CASCADE)

def __str__(self):
return self.ProfessorName

填充脚本

# populate.py, school_major_link
import os
import django
from django_xlspopulator.populator import Populator
os.environ.setdefault('DJANGO_SETTINGS_MODULE','blog_project.settings')
django.setup()
from locate.models import Major

pop = Populator('C:/Users/David/Desktop/db_setup/School_Majors.xlsx', school_majors)
pop.populate()

尝试运行脚本时出现错误消息

Traceback (most recent call last):
File "populate_school_major.py", line 9, in <module>
pop = Populator('C:/Users/David/Desktop/db_setup/School_Majors.xlsx', school_majors)
NameError: name 'school_majors' is not defined

但是这是有道理的,因为这个脚本在模型部分中查找类名与表的名称,所以我不太确定如何能够填充正确的表,请注意,我已经有一个名为 Majors 的表已使用此脚本填充,但由于 django 通过变量与单独的类建立多对关系,我陷入了困境。

我尝试使用上面的填充脚本,但注意到这不起作用,因为它正在定位类,而不是数据库表的保存形式。 (在 sqlite3 中,专业 Manytomanyfield 的表名称称为 school_majors)。

如果有人对我如何填充数据库有任何建议,那就太好了。

下图是数据库表名。 enter image description here下面的 Excel 文件

enter image description here

最佳答案

当您在 Django 中定义 ManyToManyField 时,它会在后台创建一个模型来存储映射。

您可以使用 ManyToManyField 的 through 属性访问此模型。在您的情况下,这将是:

locate.models.School.majors.through

您当前的脚本失败,因为 school_majors 根本不是定义的名称 - 尝试将其替换为对您希望填充的模型的引用:

pop = Populator('C:/Users/David/Desktop/db_setup/School_Majors.xlsx', locate.models.School.majors.through)
pop.populate()

如果这不起作用,您可能希望考虑在 ManyToManyField 上定义显式 through 模型(如 explained in the Django docs ),然后在您的 Populator 实例化中指定该模型.

祝你好运!

关于django - 如何从 Excel 文件填充 django Manytomany 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54701523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com