(这里是Django新秀)
对于“项目”模型,我想存储一些数据。数据是关于住房财产。因此,例如:生活空间的数量,这些空间在哪个楼层,以及这些空间有多大。
因为并非每个项目对象都有一定数量的生存空间,而且某些项目对象也有一行称为商店空间或餐厅空间,我想知道存储这些数据的好方法。 B 我希望在模型中存储动态大小的表。以下是非常好的例子:
现在一些项目将只有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
这是将此表放入数据库的正确方法吗? JSONfield怎么样?
此外,在我的模型中,我有一个字段,其中住房空间的数量必须由用户放入。因此,我在考虑是否可以根据模型中的其他字段动态创建行?因此,如果用户在Django管理中并输入4表示用户在Django管理中只看到4行的房屋数量。
答案 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