【发布时间】:2011-05-06 14:46:47
【问题描述】:
我有这些模型(我将字段数量限制为只需要的那些)
class unit(models.Model):
name = models.CharField(max_length=200)
class project(models.Model):
name = models.CharField(max_length=200)
class location(address):
project = models.ForeignKey(project)
class project_unit(models.Model):
project = models.ForeignKey(project)
unit = models.ForeignKey(unit)
class location_unit(models.Model):
project = models.ForeignKey(project)
#Limit the selection of locations based on which project has been selected
location = models.ForeignKey(location)
#The same here for unit. But I have no idea how.
unit = models.ForeignKey(project_unit)
我的新手头无法掌握如何在 location_unit 模型中限制 location 和 unit 这两个字段以仅显示引用 location_unit 中所选项目的选项。我应该覆盖模型表单并在那里进行查询,还是可以使用limit_choices_to。无论哪种方式我都失败了
编辑:澄清一下,我希望这发生在 Django Admin 中。我也试过 formfield_for_foreignkey,但还是不行。
编辑 2:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "unit":
kwargs["queryset"] = project_unit.objects.filter(project=1)
return db_field.formfield(**kwargs)
return super(location_unit_admin, self).formfield_for_foreignkey(db_field, request, **kwargs)
上面的代码 sn-p 有效。但我当然不希望项目指向 1。我如何引用模型 project_id? 我试过这个:
kwargs["queryset"] = project_unit.objects.filter(project=self.model.project.project_id)
但这不起作用(实际上我已经尝试了很多变体,是的,我是 django 新手)
【问题讨论】:
标签: django foreign-keys limit