2009-04-08 190 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

相關問題