我希望为包含不同类型的“文章”的单个表构建一个模型(为了参数的缘故)。
每篇文章都有大多数常见字段(例如标题,日期等),但有些文章类型(我的控制范围之外)的字段要求和相应的验证规则略有不同。任何字段都不会包含特别大量的数据(最多约100个字符)。
目前我正在考虑定义所有常见字段的模型,然后为任何可以在XML / JSON中详细说明的异常字段提供文本字段:
class Article(models.Model):
owner = models.ForeignKey('User')
title = models.CharField(max_length=20)
published = models.BooleanField()
extra = model.TextField() # XML/JSON here for any unusual fields
created = models.DateField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True, auto_now_add=True)
# ... etc.
我会创建django表单类来处理验证,因为添加了新的文章类型,但我试图避免为不同的文章类型使用不同的表。
是否有一种普遍接受的方式来处理这种情况或者它是否主要是主观的?显然,XML / JSON增加了一些不幸的开销。
感谢。
答案 0 :(得分:1)
这是......一种非常可怕的方式。通常你会把这些数据放到一个单独的表中并与之相关,但是......无论如何。
答案 1 :(得分:0)
你不能用GenericForeignKeys做到这一点吗?
http://www.djangoproject.com/documentation/models/generic_relations/
您可以添加:
extra_type = models.ForeignKey(ExtraType)
extra = generic.GenericForeignKey()
到你的模特。似乎比包括json更好。
答案 2 :(得分:0)
我所做的是创建一个继承自Article
模型的模型
如果您想为每个模型创建一个表,只需在您的元类中标记abstract = True
如果您想与基础Article
建立一对一的关系,请确保您的元类中有abstract = False
。
使用south将新模型迁移到数据库并完成。
有关模型继承的详细信息,请参阅this article和this document。
是否有特殊原因需要这样的场地灵活性?
他们可能会从后台改变吗?