模型中带有 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
作为字段名称。 class
、def
、type
之类的名称是 Python 中的关键字,(简而言之)您不能将它们用作变量名。更多详情见this post
您需要了解关系数据库、Django 模型及其关系如何工作。我假设您正在开发某种简单的学校 ERP 系统,您希望在其中存储有关学生、班级和科目的数据。如果是这种情况,您肯定需要的不仅仅是一个带有 JSON 字段的模型。如果您不知道为什么,请查看您的模型,想象它确实有效并尝试思考: A) 您将如何选择分配给某个班级的所有学生? B) 你将如何选择分配了某些科目的所有学生? C) 有一门学科在不止一堂课中教授。您如何存储这些信息?
仔细阅读this article from Django documentation 并思考您的应用需要哪些模型以及它们之间的关系。肯定有不止一种方法可以做到这一点,这取决于您的假设和要求是什么。但是,您可以从以下几个简单的事实开始:
Person
存在
Student
是特定类型的人(不是每个人都一定是学生)
School
存在并且它有一些学生
Classes
存在并且它们属于某个特定的学校
Subjects
存在于一所学校中,有时它们只与一个班级有关,但有时与多个班级有关
每个Subject
都可以成为:mandatory
与否,elective
与否,并且是某些已定义的主题类型列表之一:例如science
、history
、language
...
我希望它有所帮助。不要犹豫,在 cmets 中提出更多问题,如果它对您的问题有帮助,请告诉我。
【讨论】:
以上是关于模型中带有 json 字段的 Django crud api的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Presto JSON 函数访问字段名称中带有“~”的 json 字段