django把数据表放在模型中

时间:2017-05-16 12:53:07

标签: python django database django-models

(这里是Django新秀)

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

  • 生活空间1 - 地面 - 50平方米
  • 生活空间2 - 一楼 - 82平方米

因为并非每个项目对象都有一定数量的生存空间,而且某些项目对象也有一行称为商店空间或餐厅空间,我想知道存储这些数据的好方法。 B 我希望在模型中存储动态大小的表。以下是非常好的例子:

  • 餐厅 - Groundfloor - 147m2
  • Livingspace 1 - 一楼 - 55平方米
  • Livingspace 2 - 一楼 - 110平方米
  • Livingspace 3 - 二楼 - 55平方米
  • Livingspace 4 - 二楼 - 110平方米
  • Livingspace 5 - 三楼 - 147平方米

现在一些项目将只有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行的房屋数量。

2 个答案:

答案 0 :(得分:0)

db模式的类型取决于您将如何使用该数据。 您希望聚合(总和,计数等),查询的字段(主键除外)将直接作为列放置,而依赖的字段(其他列上的动态性可以进入JSON字段。

考虑到您的用例,JSON Field可能是一种很好的方法,因为您可能不希望根据每个数据进行查询。

答案 1 :(得分:0)

不,这不是好习惯。

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

一个简单的例子:

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实例代表您之前说过的行。通过设计这样的模型可以使过滤,查询非常容易。

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

如需更多参考,请尝试docs