我使用的是django 1.2 我有兩種模式。如何在django中限制ForeignKey
編輯:我剛剛找到一個更好的例子:
class Parent(models.Model):
name = models.CharField(max_length=255)
favorite_child = models.ForeignKey(Child)
class Child(models.Model):
name = models.CharField(max_length=255)
myparent = models.ForeignKey(Parent)
在這個例子中我希望能夠選擇一個最喜歡孩子,但問題是,管理員會給我所有的孩子們選擇而不僅僅是那些我正在編輯的父母的孩子。
原來的例子:
class Version(models.Model):
name = models.CharField(max_length = 255)
platform = models.ForeignKey("Platform",related_name='version_platform')
class Platform(models.Model):
name = models.CharField(max_length = 255)
default_version = models.ForeignKey(Version,related_name='platform_default_version')
我想Django管理限制下拉當我選擇default_version,這樣我只能選擇對自己目前的平臺這些版本。
例如,如果我有版本命名爲'1.1',有平臺joomla和版本'1.2'的wordpress作爲平臺。
所以當我選擇default_version在WordPress的管理下拉我想它只顯示我版本'1.2'的下拉列表中。現在它向我展示了所有的版本。
我試圖limit_choices_to限制如圖here ,所以我試試這個:
class Platform(models.Model):
name = models.CharField(max_length = 255)
default_version = models.ForeignKey(Version,limit_choices_to={'platform':XXXXX},related_name='platform_default_version')
,但我失去了,什麼把insted的XXXX的我嘗試把自己的,但沒有奏效。
我也曾嘗試
limit_choices_to={'platform.name':name}
我沒有工作,要麼。
在這個例子中我想可以選擇一個最喜歡的孩子,但問題是,管理員會給予我的一切誰是我目前編輯父母的孩子的孩子可以選擇,而不僅僅是那些。
limit_choices_to不與動態值正常工作,請參見http://計算器。com/questions/1968596/django-limit-choices-this-this-correct我不知道這是否會幫助你的情況,因爲我猜這是在添加一個新的平臺不編輯? – JamesO 2012-03-08 15:08:46
關於你的第二個例子,你寧願爲你的孩子設置一個'favorite'布爾字段,然後你會使用'unique_together'。 – 2012-03-08 15:38:48
但是然後我將能夠選擇2個最喜歡的孩子,這些孩子會犯錯誤的空間。 – yossi 2012-03-08 15:43:33