我需要添加额外的栏目,如果产品是在一个特定的类别。我想到了使用JSON
或允许空列,但是有没有更好的方法来处理这种情况呢?我用的是PostgreSQL数据库。这是我的模型结构。
class Product(Base):
def __str__(self):
return self.name
name = models.CharField(max_length=255, unique=True, validators=[validate_alphanumeric])
is_safari = models.BooleanField(default=True)
Product表已Map到如下代理
class Agent(Base):
def __str__(self):
return self.agent_user.username
agent_user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.RESTRICT,
)
country = CountryField()
city = models.CharField(max_length=255)
AgentProduct
模型
class AgentProduct(Base):
agent = models.ForeignKey(
Agent,
on_delete=models.RESTRICT,
)
product = models.ForeignKey(
Product,
on_delete=models.RESTRICT,
)
a_rate = models.IntegerField()
c_rate = models.IntegerField()
如果is_safari
对于AgentProduct
模型是真的,我想添加一些额外的信息,如
per_v_charge = models.IntegerField()
extra_p_charge = models.IntegerField()
# something like this
2条答案
按热度按时间ukdjmx9f1#
1.首先添加可空字段。
1.等待A。需要添加越来越多的可空列和B。使用这些可空字段构建越来越多的查询。
1.根据收集的数据和用例证据,评估什么是最好的,是将它们保留为可空列还是添加JSON字段。
有两个类别可以让你和应用程序最好的选择:
评估什么是最适合您的,就是定义什么是其他开发人员易于阅读和理解的;通常,代码较少且易于文档化的解决方案可能总是更好。
要评估什么对应用程序最好,就是定义Django或postgres要处理的东西,现在postgres处理JSON字段非常好,Django支持它们,就好像它们对ORM很重要一样。但是,您必须再次抛出一致的模式,以使其高效。
cyej8jka2#
你可以使用mongoDb来实现无模式数据库结构。你可以用它为不同的“行”创建不同的“列”。