如何编写动态Django模型?

1 投票
2 回答
615 浏览
提问于 2025-04-15 18:56

我想要的是一些建议,来定义一个可以重复使用的产品模型,用于一个购物网站的应用。目前我知道这个商店会销售“服装”,所以产品模型会有一个“季节或系列”的关系。但将来我可能会用这个应用来销售其他产品,比如“汽车”,它们会有“机械规格”的关系。

所以我在考虑元模型,想创建一个通过键值对定义的通用模型,但我该如何建立这些关系呢?

不过,你们是专家社区,我希望你们能帮助我看得更远一些。

2 个回答

0

一个比较流行的选择是使用类似标签的东西。你可以把所有物品共有的内容放在一起,比如物品的ID、名称、描述和价格。然后再在另一个表格里放一些更通用的标签,或者描述性的标签,这些标签和那些物品关联起来。比如你可以有一个标签表示季节,或者汽车的规格等等。

当然,这一切都取决于你如何设计系统来处理这些额外的信息。

3

一种在一个对象和许多其他类型对象之间建立关系的方法是使用GenericForeignKeyContentType框架。我猜你可能想要一个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()

不过,这确实会增加一些工作量,因为你需要创建很多模型,但它也让你在存储数据和存储方式上有很大的创造空间。

撰写回答