我是python / django的新手。我需要在django模型中存储任意数量的字段。我想知道django是否有能够解决这个问题的事情。
通常,我会在列中存储一些XML来执行此操作。 django是否提供了一些类,无论是XML还是其他(更好的)方法都可以轻松完成这些操作?
谢谢, 皮特
答案 0 :(得分:11)
有很多方法可以解决这个问题,根据您的情况,任何一种方法都可以解决。您当然可以使用TextField来存储XML或JSON或任何其他形式的文本。结合Python的pickle功能,你可以做一些更整洁的东西。
您可以查看DjangoSnippets上的Django Pickle Field定义: http://www.djangosnippets.org/snippets/513/
这允许您将Python字典转储到字段中并进行一些操作,以便在引用这些字段时可以轻松访问字典,而无需重新解析XML或其他任何内容。
我想你也可以探索编写一个自定义字段定义,它可以为其他序列化格式做类似的事情,虽然我不确定它会有多大用处。
或者您可以简单地重构模型以利用ManyToMany字段。您可以为通用键,值对创建模型,然后在主模型上,您将获得对该通用键值模型的M2M引用。通过这种方式,您可以利用更多的Django ORM来引用数据等。
答案 1 :(得分:0)
有一个XML字段可用: http://docs.djangoproject.com/en/dev/ref/models/fields/#xmlfield
但它会强制您对生成的查询进行额外的解析。 (我认为你必须在某种程度上做...)
我考虑过将一个列表unicode(mycolumnlist)转储到一个char字段中,之后只有一定数量的索引字段,如:
class DumbFlexModel(models.Model):
available_fields = models.CharField()
field1 = models.CharField()
field2 = models.CharField()
field3 = models.CharField()
...
这样你至少可以在available_fields上执行一个包含查询,将结果过滤到只有你试图获得vaules的字段的那些,但是这个位置是任意的,所以你仍然需要经历每个结果和进程available_fields获取值的位置。
或者可能会转储序列化的( pickle.dumps())词典列表?
我对其他建议感兴趣。