2009-04-08 191 views
18

有什么办法可以将django中的外键设置为另一个模型的字段Django模型设置外键到另一个模型的字段

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

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

回答

16

是的,没有。 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选项创建用于保存元数据的自定义中介表。

65

我没有试过,但似乎因为Django的1.0,你可以这样做:

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

文档是here

+4

+1 - 很好找! – 2012-06-07 18:30:20

+2

请再次阅读该问题。 – ultrajohn 2012-09-03 12:11:53

+0

正是我在找的东西。我希望这也意味着我可以做'foo.foo_bar = value_bar'。无需查询Bar – 2017-07-04 12:23:28

相关问题