【发布时间】:2010-10-18 07:54:24
【问题描述】:
有没有办法在 django 中将外键设置为另一个模型的 字段?
例如,假设我有一个 ValidationRule 对象。而且我希望规则定义另一个模型中的哪些字段要被验证(以及一些其他信息,例如它是否可以为空、数据类型、范围等)
有没有办法在 django 中存储这个字段级映射?
【问题讨论】:
标签: python django django-models
有没有办法在 django 中将外键设置为另一个模型的 字段?
例如,假设我有一个 ValidationRule 对象。而且我希望规则定义另一个模型中的哪些字段要被验证(以及一些其他信息,例如它是否可以为空、数据类型、范围等)
有没有办法在 django 中存储这个字段级映射?
【问题讨论】:
标签: python django django-models
我还没有尝试过,但似乎从 Django 1.0 开始,您可以执行以下操作:
class Foo(models.Model):
foo = models.ForeignKey(Bar, to_field='bar')
这方面的文档是here。
【讨论】:
foo.foo_bar=value_bar。无需查询 Bar
是和不是。 FK关系是在类级别描述的,镜像数据库中的FK关联,所以不能直接在FK参数中添加额外的信息。
相反,我建议使用一个字符串来保存另一个表上的字段名称:
class ValidationRule(models.Model):
other = models.ForeignKey(OtherModel)
other_field = models.CharField(max_length=256)
这样,您可以通过以下方式获取该字段:
v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)
请注意,如果您使用的是多对多字段(而不是一对多),则内置支持使用 through 选项创建自定义中间表来保存元数据。
【讨论】: