早安伙计们! 场景如下。对于Django上的一些模型,我想允许最终用户定义自己的字段。如果我可以保留所有Django这些令人敬畏的功能,如ORM,那将是很棒的,所以我仍然可以执行类似field__gte的调用来搜索模型,仍然根据字段类型进行字段验证等等。我已经考虑了两种方法这个,我不仅仅对新的建议持开放态度。任何反馈都会非常感激。
第一种方法是实体属性值(http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model),django已经有了一个应用程序。见http://code.google.com/p/django-custom-field/ 我认为这将是一个很好的解决方案,但我失去了“mymodel.objects.filter(custom_field_x = something)”的能力。也许有办法重新获得ORM,任何想法?但是我听说过很多关于这种方法的坏故事,我有点害怕使用它。
第二种方法是为每个用户建立一个数据库表(可能不超过1000个)。我读过django在inspectdb中有一些东西,它实际上会检查哪些字段并为你生成模型。这可能很有用,但我想也许我应该存储这个特定用户创建的字段,并以某种方式告诉django,嘿,我们在这个模型中也有这个字段。这可能吗?我知道为每个用户设置不同的表通常很糟糕,但考虑到这种情况,你们如何评价这种方法,是否可以为每个用户设置一个表?
需要自定义字段的模型例如是Person。他们可能想要一个自定义字段来存储地址,血型或任何其他东西。
非常感谢!周日愉快!
非常相似:How to create user defined fields in Django - 但只讨论EAV,我想避免。我愿意接受新的想法!
答案 0 :(得分:1)
一种方法是使用基于NoSQL文档的解决方案,例如MongoDB,它允许您存储具有流畅结构的对象(没有预定义列的限制)。
优点:
缺点:
编辑:
阅读完评论之后,值得指出的是,根据您使用的NoSQL解决方案,您可能不需要reversion支持。例如,CouchDB内置了对document versioning的支持。
答案 1 :(得分:1)
如何创建另一个用于存储user_defined_fields的模型?
class UserDefinedField(models.Model):
#..................
user = models.ForeignKey(User)
field_name = models.CharField(max_length=50)
field_value = models.TextField()
然后你可以UserDefinedField.objects.filter(field_name=some_name,field_value=somevalue)