Django中的书籍结构

时间:2017-01-30 01:45:52

标签: python django sqlite

我目前正在尝试在模型中实现Django中的书籍结构。

结构如下

图书分类:

标题

页面(这是一个页面对象数组)

参考书目(标题和链接词典)

页面类:

标题

部分(部分对象数组)

图像(图像网址数组)

章节类:

标题:

文本:

图像(图像网址数组)

视频(视频网址数组)

我是Django和SQL结构的新手。我的问题具体是什么,为了使每个条目都具有上面列出的组件的书籍的数据库,最好的方法是什么?我知道最好的方法是拥有一个书籍表,其中每个条目与页面具有一对多的关系,而这些页面又与页面具有一对多的关系。但我不清楚将Django模型连接在一起以及如何启用对象列表(重要的是这些列表必须是动态的)。

2 个答案:

答案 0 :(得分:1)

SQL没有“数组”的概念 - 表中的每个字段都是原子的(包含单个值) - 所以如果你想要一个实体A“拥有”许多(“数组”)另一个实体B您需要(至少)两个表(一个用于B,一个用于A)以及这些表之间的关系。在这里你可以有两种关系:“一对多”和“多对多”。

如果Book的实例只能属于Page的单个实例 - 例如Page - > Book Book属于单Page的{​​{1}}关系(显然),您有“一对多”关系(Page有一个或{更多Bookpage属于单个book)。在数据库级别,这由A表实现,该表具有指向其所属的B的主键的外键字段。在Django模型中,这是使用reindex完成的。

如果B的实例包含多个ABook的实例可以属于多个Author,则您有多对多的关系。这可能是Author - >的情况。 Book关系(Book写入一个或多个AuthorBook由一个或多个Author写入。在数据库级别,这是实现的通过附加表格,其中“book”上有外键,“author”上有外键(通常是两个键的“唯一”约束,因此您不会将同一作者的两次关联到同一本书)。 Django,这是在任何BibliographyItem或(nb:exclusive'或')ForeignKey模型上使用models.ForeignKey() field完成的,Django将自己创建中间表。

因此,对于您的示例,您将需要:

  • 一个“书”模型
  • “BibliographyItem”模型
  • “Book”上带有外键的“Page”模型
  • “Page”
  • 上带有外键的“Section”模型
  • “图片”模型
  • “视频”模型

根据您是否希望能够在书籍之间共享相同的Book,您可能需要在“ManyToMany上使用ManyToMany字段或Image。” case(并且不知道更多关于你的项目的要求)我宁愿选择Video关系(很可能不止一本书会引用同一个项目。)

对于@Consumes(MediaType.APPLICATION_JSON) @Path("/select") @GET @Produces(MediaType.APPLICATION_JSON) public String select(@QueryParam("data")String data) { ,您可以选择在不同部分之间共享它们。

我强烈建议您阅读更多(并做一些教程)关于关系数据库建模和关系模型规范化,以了解核心概念以及如何正确设计模型。 Django的ORM只是数据库表和字段的一个薄包装器,所以如果你希望做任何好事,你真的需要了解数据库级别的内容。

答案 1 :(得分:-1)

每个Django模型都是您在应用中导入的类,以便能够使用它们。要将模型连接在一起,您可以使用外键来定义关系,即您的Page类将具有Book中的外键。要在列表中存储列表,其中一种方法是使用json模块将列表转换为字符串,并将该字段定义为文本字段。 json.dumps将列表转换为字符串,json.loads将字符串转换回列表。或者,如果你在谈论其他"列表"在你的问题中,那么你所需要的只是django的基本查询集,你可以通过model.objects.get()获得。 Queryset是表中的行列表。