【问题标题】:Django crud api with json fields in model模型中带有 json 字段的 Django crud api
【发布时间】:2020-12-23 10:18:21
【问题描述】:

我是 Django rest-framework 的新手。 我正在创建一个 CRUD api 来实现以下模型。

我尝试使用序列化程序,但随后它在数据库中创建不同的表并链接它们。 我想拥有单个数据模型,然后将其中的子对象/模型作为 JSON 字段。

类似models.py的东西在json下面实现

    class student(models.Model):
        students=models.JSONField()
        class=models.JSONField()
        subjects=models.JSONField() 

这可以实现吗,请您指出代码或示例吗??

{
"student":{
    "name" : "bril",
    "last_name" : "jone"
      }
"class":{
    "std" : "8",
    "section" : "c"
      }
"subjects":{
    "mandatory":{
            "subj" : "science",
            "marks" : "68"
                }
    "language":{
            "subj" : "english",
            "marks" : "54"
                }
    "elective":{
            "subj" : "evs",
            "marks" : "56"
                }
    }
}

【问题讨论】:

  • 这能回答你的问题吗? Django Rest Framework and JSONField
  • 让我重新构造这个问题。为了实现上面提到的JSON结构,如何创建模型?
  • 您是否在问如何在models.JSONField 上执行问题中的结构?

标签: django django-models django-rest-framework django-templates


【解决方案1】:

如果我没有正确回答你的问题,那么你只是在问你应该怎么做才能从你的 DRF API 获得这个 JSON 响应:

{
  "student": { "name" : ..., "last_name" : ...}
  "class": { ... },
  "subjects": {
    "mandatory": {...},
    "language": {...},
    "elective": {...}
  }
}

对不起,您要求的基本上是为您写models.py。尽管我不渴望成为另一个 Stack Overflow 警长 - 这不是你要求为你完成任务的地方。但是,我可以指出一些阻止您的代码工作的问题,无论您将通过什么序列化程序。


  1. 不会真正阻止您的代码表单工作,但您需要了解如何使用代码样式。 This can be very helpful - 这不是代码风格指南,它来自 Django 贡献者文档。其中一些不适用于您的项目,但是您绝对应该遵循很多好的做法,尤其是在命名约定方面。还有,学习使用PEP 8

  2. 您在模型student 中使用class 作为字段名称。 classdeftype 之类的名称是 Python 中的关键字,(简而言之)您不能将它们用作变量名。更多详情见this post

  3. 您需要了解关系数据库、Django 模型及其关系如何工作。我假设您正在开发某种简单的学校 ERP 系统,您希望在其中存储有关学生、班级和科目的数据。如果是这种情况,您肯定需要的不仅仅是一个带有 JSON 字段的模型。如果您不知道为什么,请查看您的模型,想象它确实有效并尝试思考: A) 您将如何选择分配给某个班级的所有学生? B) 你将如何选择分配了某些科目的所有学生? C) 有一门学科在不止一堂课中教授。您如何存储这些信息?

仔细阅读this article from Django documentation 并思考您的应用需要哪些模型以及它们之间的关系。肯定有不止一种方法可以做到这一点,这取决于您的假设和要求是什么。但是,您可以从以下几个简单的事实开始:

  • Person 存在
  • Student 是特定类型的人(不是每个人都一定是学生)
  • School 存在并且它一些学生
  • Classes 存在并且它们属于某个特定的学校
  • Subjects存在于一所学校中,有时它们只与一个班级有关,但有时与多个班级有关
  • 每个Subject 都可以成为mandatory 与否,elective 与否,并且是某些已定义的主题类型列表之一:例如sciencehistorylanguage...

我希望它有所帮助。不要犹豫,在 cmets 中提出更多问题,如果它对您的问题有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2021-10-19
    • 2017-03-21
    • 2011-01-14
    相关资源
    最近更新 更多