Django Model将外键设置为另一个Model的字段

时间:2009-04-08 14:12:43

标签: python django django-models

有没有办法将django中的外键设置为另一个模型的字段

例如,假设我有一个ValidationRule对象。我希望规则定义另一个模型中要验证的字段(以及其他一些信息,例如它是否可以为null,数据类型,范围等)。

有没有办法在django中存储这个字段级映射?

2 个答案:

答案 0 :(得分:75)

我没试过这个,但似乎自Django 1.0以来你可以做类似的事情:

class Foo(models.Model):
    foo = models.ForeignKey(Bar, to_field='bar')

此文档为here

答案 1 :(得分:18)

是和否。 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选项保存元数据。