Django 如何在管理面板中实现基于外来模型值的依赖下拉列表

Django 如何在管理面板中实现基于外来模型值的依赖下拉列表,django,django-models,django-admin,django-smart-selects,Django,Django Models,Django Admin,Django Smart Selects,我有这样的课程: class Building(models.Model): name = models.CharField(max_length=10) floors= models.IntegerField() def __str__(self): return self.name class BuidingAccessRole(models.Model): role_name = models.CharField(max_length=1

我有这样的课程:

class Building(models.Model):
    name = models.CharField(max_length=10)
    floors= models.IntegerField()

    def __str__(self):
        return self.name

class BuidingAccessRole(models.Model):
    role_name = models.CharField(max_length=10)  #name for the role of accessing a floor of one building
    building = models.ForeignKey(building,on_delete=models.CASCADE)
    floor = models.IntegerField()   Note:#i want this floor to be shown as choicefield with count starting from 1 to (building.floors) and get saved as integer value in database.
    def __str__(self):
       return self.name

  """If we set Building admin page as this object : 
       name='b1'
       floors=3
  then :
  BuidingAccessRole admin page to be shown as 
       name='Access for floor'
       building = b1 or 1 as 'id'
      floor shown as <select>1,2,3 as option </select>""" 
班级建设(models.Model):
name=models.CharField(最大长度=10)
楼层=模型。整型字段()
定义(自我):
返回self.name
类BuildingAccessRole(models.Model):
role_name=models.CharField(max_length=10)#访问一栋建筑楼层的角色名称
building=models.ForeignKey(building,on_delete=models.CASCADE)
floor=models.IntegerField()注意:#我希望此楼层显示为choicefield,计数从1到(building.floors),并在数据库中保存为整数值。
定义(自我):
返回self.name
“”“如果我们将建筑管理页设置为此对象:
name='b1'
楼层=3
然后:
BuildingAccessRole管理页面将显示为
name='楼层通道'
建筑物=b1或1作为“id”
地板显示为1,2,3作为选项“”
注意:#我希望BuildingAccessRole.floor在管理页面中显示为choicefield,计数从1到(building.floors),并在数据库中保存为整数值。

我试着用链式外键来实现这个,但在这种情况下不起作用。还有其他方法吗

覆盖
表单
,以便
模型管理员
使用您自己的
模型表单
(请参阅)。然后在表单中,您可以创建
floor
a
ChoiceField
,并在其
\uuuu init\uuuu
方法中设置所需的选项。但我希望我的选择作为所选建筑对象的楼层值。为什么?正如我所说的,您可以在表单的
\uuuu init\uuuu
方法中实现这一点
self.fields['floor'].choices=range(1,self.instance.building.floors+1)
或类似的内容我尝试按建议执行此操作,为相同的文件创建了git存储库(),但管理员保存无法保存列表的更改值…请尝试解决此问题。。。