【发布时间】:2010-02-05 13:44:51
【问题描述】:
我想要的是接收定义可重用产品模型的建议,对于购物网站应用程序,现在我知道商店将与“服装”进行贸易,因此产品模型将有一个“季节或收藏”关系,但将来我应该使用该应用程序与 X 产品进行交易,例如:具有“机械规格”关系的“汽车”。
所以我在考虑元模型,创建一个由键/值定义的通用模型,但是,如何建立关系?
但是,你们是专家社区,我希望你们能帮助我看到更远的地方。
【问题讨论】:
我想要的是接收定义可重用产品模型的建议,对于购物网站应用程序,现在我知道商店将与“服装”进行贸易,因此产品模型将有一个“季节或收藏”关系,但将来我应该使用该应用程序与 X 产品进行交易,例如:具有“机械规格”关系的“汽车”。
所以我在考虑元模型,创建一个由键/值定义的通用模型,但是,如何建立关系?
但是,你们是专家社区,我希望你们能帮助我看到更远的地方。
【问题讨论】:
定义一个对象和许多其他类型对象之间关系的一种方法是使用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 = Jacket(size=69, color="pink")
jacket.save()
prod = Product(price=0.99)
prod.details = jacket # It's like magic!
prod.save()
这确实增加了创建大量模型的额外工作,但它也让您可以非常有创意地存储哪些数据以及如何存储这些数据。
【讨论】:
一个流行的选择是使用标签之类的东西。因此,您将拥有所有项目共有的内容,例如项目 ID、名称、描述、价格。然后,您将在另一个表中拥有一些更通用的标签或描述的标签,与这些项目相关联。你可以有一个代表季节或汽车规格等的标签......
当然,这实际上取决于您如何设计系统来处理这些额外信息。
【讨论】: