如何在Django模型中添加条件字段?

时间:2018-03-29 13:03:05

标签: python django

基本上,我想要的是在满足条件时可用的字段,如下所示:

class ConditionalModel(models.Model):
    product = models.ForeignKey(product, on_delete=models.CASCADE)
    if category == "laptop":
        cpu_model = models.CharField(max_length=200)

因此,如果我要进入Django管理页面并创建模型的实例,然后从现有“产品”的下拉列表中选择“laptop”作为产品,则可以使用新字段。我在文档中找不到任何相关内容,所以我想知道它是否可能。

4 个答案:

答案 0 :(得分:3)

您所要求的并非“技术上”可行。模型与数据库对象相关,在传统的SQL规则下,这是不可能的。您可以改为使该字段可选,然后自定义管理页面的功能。

另一个可能的选择,虽然我对它没有多少经验,但是如果您不想在数据库中存储NULL值,则使用NoSQL数据库。

答案 1 :(得分:3)

我不认为这是可能的,因为模型定义了数据库表,因此列必须存在。

您可以使用关键字blank = True来允许没有此字段的对象。

也许您可以自定义管理界面以在某些情况下隐藏字段。

答案 2 :(得分:0)

你不能在模特中这样做。 您可以在管理面板中隐藏它,也可以为笔记本电脑制作单独的模型。 或者您可以创建字段blank=True

答案 3 :(得分:0)

不可能将字段设为可选,但是您可以使用称为Product的通用模型以及两个或更多个专门的模型,例如:ElectronicProduct,其中包含字段cpu_model和NonElectronicProduct,这两个专用模型必须包含一个OneToOneField模型到Product模型,以确保继承。