【问题标题】:django modeling and load JSON input as tablesdjango 建模并将 JSON 输入加载为表格
【发布时间】:2017-07-07 01:48:02
【问题描述】:

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

{
"students": [
        {
            "first": "John",
            "last": "Smith",
            "email": "johnsmith@mailinator.com",
            "studentClasses": [
                    {
                        "id": 1,
                        "grade": 4
                    },
                    {
                        "id": 2,
                        "grade": 3
                    },
             ]},
              {...#truncated data, this follows with more students

"classes": {
        "1": "Math 101",
        "2": "English 101",
        "3": "Science 101",
        #total 8 classes declared, truncated
        }

我的数据模型是.....

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) 被类表中的 ID 而不是学生表中的 ID 弄糊涂了,我是否必须在建模中明确声明主键,用类中的 ID 而不是学生模型?

(3) 看来我可以用“python manage.py load data myjsonfile.json”来加载表(这样就够了吗)?

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

【问题讨论】:

    标签: python json django django-models auto-populate


    【解决方案1】:

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

    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) 我认为你应该使用“多对多”的关系,而不是“一对多”

    【讨论】:

    • 您建议创建一个单独的函数作为对我的问题 (3) 的回应?那可能会奏效。现在我不明白为什么会有多对多的关系?可能我需要一个名为“studentClasses”的第三个模型,它有学生的主键和它所学的班级和该班级的成绩?通过添加问题 (4) 更新了我的问题。
    【解决方案2】:

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

    【讨论】:

    • 想知道 student_classes 会有什么帮助?这个字段需要有班级 ID 和等级,我可能需要第三个模型来处理这个吗?我添加了问题(4),这有意义吗?关于加载表,我已经在 J​​SON 文件中有一堆数据,想知道将它们放入数据库的最佳方法是什么。
    • 我认为解决此问题的最佳方法是设想问题:您需要能够根据班级查找学生数据,反之亦然。您可以通过添加连接两者的 student_classes 字段来实现这一点。要插入数据,编写一个脚本,打开一个包含数据的文件,导入类,并使用 class.save() 方法将数据保存到每个字段中?这是否更清楚?
    • 谢谢,可视化的帮助,我将为 student_classes 创建第三个模型并编写一个脚本,将数据加载到这些模型中。
    猜你喜欢
    • 2019-12-16
    • 2021-04-23
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2023-01-24
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多