如何从excel文件填充django manytomany数据库

如何从excel文件填充django manytomany数据库,django,python-3.x,django-models,sqlite,Django,Python 3.x,Django Models,Sqlite,我正在尝试将数据从excel文件传输到sqlite3数据库中的多个表中 model.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)

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

model.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
回溯(最近一次呼叫最后一次):
文件“populate_school_major.py”,第9行,在
pop=Populator('C:/Users/David/Desktop/db\u setup/School\u Majors.xlsx',School\u Majors)
名称错误:未定义名称“学校\大学专业”
但是这很有意义,因为这个脚本在models部分中查找类名,而不是表名,所以我不太确定如何填充正确的表,请注意,我已经有一个名为majors的表,它已经使用这个脚本填充了,但是由于django通过一个变量和一个单独的类建立了很多关系,我被卡住了

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

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

下面是数据库表名称的图片。 下面是Excel文件


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

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

locate.models.School.majors.through
您当前的脚本失败,因为
school\u majors
根本不是定义的名称-请尝试将其替换为您希望填充的模型的引用:

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

如果这不起作用,您可能希望考虑在MyTyMyFielfield(AS)上通过“< /Cult>”模型定义一个显式<代码>,然后在您的<代码> PuultAuth/Cux>实例化>

中指定它。
祝你好运

正如lukewarm所说,设置through允许我创建一个类,我可以使用脚本引用该类,严格来说,可以通过在model.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)
    school_Major_merge = models.ManyToManyField(Major, through='School_Major')

class School_Major(models.Model):
    major = models.ForeignKey(Major, on_delete=models.CASCADE)
    school = models.ForeignKey(School, on_delete=models.CASCADE)


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

虽然没有成功,但我会马上看医生,我很感激!如果使用csv文件,会更容易。还有我的读者。。