Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django建模并将JSON输入加载为表_Python_Json_Django_Django Models_Auto Populate - Fatal编程技术网

Python django建模并将JSON输入加载为表

Python django建模并将JSON输入加载为表,python,json,django,django-models,auto-populate,Python,Json,Django,Django Models,Auto Populate,必须制作django模型,并获取一个JSON文件来为学生和班级显示webapp提供所有数据。JSON文件将驱动我的建模,它看起来像这样(被截断为几个数据点) 我的数据模型是 class Student(models.Model): first = models.CharField(max_length=200) last = models.CharField(max_length=200) email = models.EmailField() class Classe

必须制作django模型,并获取一个JSON文件来为学生和班级显示webapp提供所有数据。JSON文件将驱动我的建模,它看起来像这样(被截断为几个数据点)

我的数据模型是

class Student(models.Model):
    first = models.CharField(max_length=200)
    last = models.CharField(max_length=200)
    email = models.EmailField()

class Classes(models.Model):
    student = models.ForeignKey(Student)
    class_name = models.CharField(max_length=50)
以下是我的问题

(1) 如何从JSON文件中接收studentClasses:[{id:1,grade:4}]类型的关系输入并填充数据库表?似乎我必须声明序列化程序,为什么和如何声明

(2) 被classes表中的ID而不是students表中的ID弄糊涂了,我是否必须在建模时显式地声明主键,在类中使用ID,而不是在students模型中使用ID

(3) 似乎我可以用“python manage.py加载数据myjsonfile.json”加载表(这样就足够了吗)

(4) 我是否需要第三个名为“StudentClass”的模型来跟踪哪个学生参加了该课程的哪个班级和年级?
提前感谢您的帮助。

至于我,似乎最好编写简短的函数(在单独的文件中)来更新数据库:

import json
from app.models import Student, Classes

data = json.loads('fixtures.json')
for student in data['students']:
    # parse student; save classes and student objects

print('done')

(2) 我认为您应该使用“多对多”关系,而不是“一对多”

您需要向学生添加一个字段student\u类,您可以使用jsonpickle将其序列化。通过使用该字段,我认为您不需要任何外键…您正在谈论“加载表”-这似乎也是您感到困惑的地方。django中的模型由类组成,正如您的建模代码所示,因此,要使用模型(以及其中的数据),您需要导入类,例如“从模型导入学生,类”。

您建议创建一个单独的函数作为对我的问题(3)的回答?这可能行得通。现在我不明白为什么多对多的关系?我可能需要第三种模式,叫做“学生课堂”,它有学生的主键,以及它所上的课和该课的分数?通过添加问题(4)更新了我的问题。想知道学生课程会有什么帮助?这个字段需要有类ID和等级,我可能需要第三个模型来处理这个问题吗?我添加了问题(4),这有意义吗?关于加载表,我已经有了JSON文件中的大量数据,我想知道将它们放入数据库的最佳方式。我认为解决这一问题的最佳方式是设想问题:您需要能够基于类查找学生数据,反之亦然。您可以通过添加student_classes字段来实现这一点,该字段将两者连接起来。要插入数据,请编写一个脚本,打开包含数据的文件,导入类,并使用class.save()方法将数据保存到每个字段中?这会让它更清晰吗?谢谢,可视化帮助,我将为student_类创建第三个模型,并编写一个脚本,将数据加载到这些模型中。
import json
from app.models import Student, Classes

data = json.loads('fixtures.json')
for student in data['students']:
    # parse student; save classes and student objects

print('done')