【问题标题】:django put data table in modeldjango 将数据表放入模型中
【发布时间】:2017-05-16 12:53:06
【问题描述】:

(这里是一个 Django 菜鸟)

对于“项目”模型,我想存储一些数据。数据是关于房产的。因此,例如:居住空间的数量、这些空间位于哪一层以及这些空间有多大。

  • 起居空间 1 - 底层 - 50 平方米
  • 生活空间 2 - 一楼 - 82 平方米

因为不是每个项目对象都有一定数量的生活空间,并且一些项目对象也有一行称为商店空间或餐厅空间之类的东西,所以我想知道存储这些数据的好方法。 B我想在模型中存储一个动态大小的表格。下面是一个很好的例子:

  • 餐厅 - 底层 - 147 平方米
  • 生活空间 1 - 一楼 - 55 平方米
  • 生活空间 2 - 一楼 - 110 平方米
  • Livingspace 3 - 二楼 - 55m2
  • Livingspace 4 - 二楼 - 110m2
  • Livingspace 5 - 三楼 - 147m2

现在有些项目可能只有 2 个或 3 个居住空间,没有餐厅等。其他项目可能有多达 10 个居住空间。我正在考虑创建 10 行字段。所以我可以输入逗号分隔的值(或者可能是 JSONfield)。比如:

row_01 = models.CharField(max_length=100)
row_02 = models.CharField(max_length=100)
row_03 = models.CharField(max_length=100)
row_etc = models.CharField(max_length=100)

"Livingspace 1","First floor","55"
"Livingspace 2","Second floor","100"
etc
  1. 这是否是将此表放入数据库的正确方法? JSONfield 怎么样?

  2. 另外,在我的模型中,我有一个字段,用户必须在其中输入住房空间的数量。因此我在想是否可以根据模型中的其他字段动态创建行?因此,如果用户在 Django 管理中并输入 4 作为用户在 Django 管理中只能看到 4 行的房屋数量。

【问题讨论】:

  • 请展示您当前的型号。

标签: python django database django-models


【解决方案1】:

不,这不是好习惯。

据我了解,可以使用两个表来包含数据。在 django 中,每个模型对应一个表,字段为列。所以你只需要制作一个 House 模型和另一个与 House 模型具有外键关系的模型 Room。

一个简单的例子:

class House(models.Model):
    name = models.CharField()

class Room(models.Model):
    house = models.ForeignKey(House)
    room_type = models.CharField()
    area = models.CharField()
    floor_no = models.IntegerField()

由此,每个 House 模型实例代表一所房子。每个 Room 实例代表您之前所说的行。通过设计这样的模型可以使过滤、查询变得非常容易。

Room 实例通过外键关系链接到 House 模型,从而可以根据所需规范创建任意数量的行。

如需更多参考,请尝试docs

【讨论】:

  • tnx!这就是你所说的多对一关系,对吗? docs.djangoproject.com/en/1.11/topics/db/examples/many_to_one
  • 是的,没错。你对这个答案满意吗?
  • 是的,我一直在尝试这个,从技术角度来看,这应该是最好的答案。但是,从最终用户的角度来看,我对它与 Django 管理的结合方式并不满意。有很多房子,每栋房子有很多楼层,你会在管理页面中获得很多条目。我猜 Django 管理员对此并不完美。 :(
  • 实际上,list_filter (docs.djangoproject.com/en/1.11/ref/contrib/admin/…) 解决了这个问题,让用户可以选择只选择某个房子。让它更有条理!
  • 实际上,当使用 InlineModel、list_display、list_editable、ordering 等时,Django admin 成为一个非常有能力的后端!喜欢它:-)
【解决方案2】:

数据库架构的类型取决于您将如何使用该数据。 您要聚合(sum,count等),查询的字段(主键除外)将直接放置为列,而依赖的字段(其他列上的动态性)可以进入JSON字段。

考虑到您的用例,JSON 字段可能是一个不错的方法,因为您可能不想根据每个数据进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 2010-10-22
    • 1970-01-01
    • 2021-02-10
    • 2020-11-07
    • 2012-06-29
    • 2016-10-27
    相关资源
    最近更新 更多