我使用的是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