模型中带有 json 字段的 Django crud api

Posted

技术标签:

【中文标题】模型中带有 json 字段的 Django crud api【英文标题】:Django crud api with json fields in model 【发布时间】: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 上执行问题中的结构? 【参考方案1】:

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


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

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


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

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

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

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

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

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

【讨论】:

以上是关于模型中带有 json 字段的 Django crud api的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Presto JSON 函数访问字段名称中带有“~”的 json 字段

django postgresql json 字段模式验证

将其字段中带有逗号的 .csv 文件转换为 JSON/TXT

如何从 django 模型中为模型字段定义 json 类型

如何查询 django JSON 字段中的特定字段

将 json 模型字段与 django 石墨烯一起使用