gpt4 book ai didi

python - 具有相同或相似字段的 Django 模型

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:11 25 4
gpt4 key购买 nike

我开始学习django,已经有一个问题:如果表有相似的字段,什么样的模型创建更好?1)标准方式形成官方教程,如

class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)

class Restaurant(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()

如您所见,两个模型具有相同的名称和地址字段。我在 https://docs.djangoproject.com/en/1.6/topics/db/models/#multi-table-inheritance 中找到多表继承的工作原理如下:2)

class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)

class Restaurant(Place):
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()

正如文档所说:Place 的所有字段也将在 Restaurant 中可用,尽管数据将驻留在不同的数据库表中。

那么,这两者之间有什么主要区别吗?我应该使用哪一个?

最佳答案

在这种情况下,我认为您应该使用继承(解决方案 2)。

因为Restaurant是一个特殊的Place,这意味着Restaurant有字段nameaddress,另外,餐厅有字段 serves_hot_dogsserves_pizza

考虑到上述描述,所有解决方案都是合理的。但是,Restaurant 是一个PlaceRestaurant 必须可以被处理为Place。在解决方案1中,RestaurantPlace是分开的,您不能将Restaurant处理为Place。(仅考虑OOP)

在另一边,在解决方案1中,如果我保存一个地址为A的Place,并添加一个具有相同地址的Restaurant。我在数据库中保存了两次相同的地址,这导致了冗余和不一致。

<小时/>

这个问题与OOP中的组合和继承的区别类似。

关于python - 具有相同或相似字段的 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com