代码之家  ›  专栏  ›  技术社区  ›  gimpf

如何编写动态Django模型?

  •  1
  • gimpf  · 技术社区  · 6 年前

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

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

    但是,你是专家社区,我希望你能帮助我看到更多。

    2 回复  |  直到 15 年前
        1
  •  3
  •   graham.reeds    15 年前

    定义一个对象和许多其他类型对象之间关系的一种方法是使用 GenericForeignKey 以及 ContentType 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(size=69, color="pink")
    jacket.save()
    prod = Product(price=0.99)
    prod.details = jacket  # It's like magic!
    prod.save()
    

    这确实创造了创建大量模型的额外工作,但它也允许您对存储的数据和存储方式非常有创意。

        2
  •  0
  •   Sean Reifschneider    15 年前

    其中一个流行的选择是使用类似标签的东西。所以你会得到所有项目都通用的东西,比如项目ID、名称、描述、价格。然后,您将在另一个表中拥有一些更通用的标记或描述的标记,这些标记与这些项相关联。你可以有一个代表季节的标签,或者汽车规格等等。

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