【问题标题】:How to write dynamic Django models?如何编写动态 Django 模型?
【发布时间】:2010-02-05 13:44:51
【问题描述】:

我想要的是接收定义可重用产品模型的建议,对于购物网站应用程序,现在我知道商店将与“服装”进行贸易,因此产品模型将有一个“季节或收藏”关系,但将来我应该使用该应用程序与 X 产品进行交易,例如:具有“机械规格”关系的“汽车”。

所以我在考虑元模型,创建一个由键/值定义的通用模型,但是,如何建立关系?

但是,你们是专家社区,我希望你们能帮助我看到更远的地方。

【问题讨论】:

    标签: python django


    【解决方案1】:

    定义一个对象和许多其他类型对象之间关系的一种方法是使用GenericForeignKeyContentType framework。我猜你会寻找带有一些更具体相关对象的Product,例如Jacket。它可能看起来像这样:

    class Product(models.Model):
        price = models.FloatField()
        description = models.TextField()
        content_type = models.ForeignKey(ContentType)
        object_id = models.PositiveIntegerField()
        details = generic.GenericForeignKey('content_type', 'object_id')
    
    class Jacket(models.Model):
        size = models.PositiveIntegerField()
        color = models.CharField(max_length=25)
    

    这允许您定义任意数量的类似于Jacket 的模型,这些模型可以与您的产品相关联。

    jacket = Jacket(size=69, color="pink")
    jacket.save()
    prod = Product(price=0.99)
    prod.details = jacket  # It's like magic!
    prod.save()
    

    这确实增加了创建大量模型的额外工作,但它也让您可以非常有创意地存储哪些数据以及如何存储这些数据。

    【讨论】:

    • 如果我们这样运行:IntegrityError: (1048, "Column 'content_type_id' cannot be null")
    • 你是对的。我没有运行那段代码,订单被取消了。我已对其进行了修复,以便它可以正常工作。
    • 谢谢 Jack M。那么反过来呢?
    【解决方案2】:

    一个流行的选择是使用标签之类的东西。因此,您将拥有所有项目共有的内容,例如项目 ID、名称、描述、价格。然后,您将在另一个表中拥有一些更通用的标签或描述的标签,与这些项目相关联。你可以有一个代表季节或汽车规格等的标签......

    当然,这实际上取决于您如何设计系统来处理这些额外信息。

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多