该模型的逻辑是:
- 一个
Building
有很多Rooms
- A
Room
可能在另一个内部Room
(例如壁橱-“ self”上的ForeignKey) - A
Room
只能Room
位于同一建筑物的另一个内部(这是棘手的部分)
这是我的代码:
#spaces/models.py
from django.db import models
class Building(models.Model):
name=models.CharField(max_length=32)
def __unicode__(self):
return self.name
class Room(models.Model):
number=models.CharField(max_length=8)
building=models.ForeignKey(Building)
inside_room=models.ForeignKey('self',blank=True,null=True)
def __unicode__(self):
return self.number
和:
#spaces/admin.py
from ex.spaces.models import Building, Room
from django.contrib import admin
class RoomAdmin(admin.ModelAdmin):
pass
class RoomInline(admin.TabularInline):
model = Room
extra = 2
class BuildingAdmin(admin.ModelAdmin):
inlines=[RoomInline]
admin.site.register(Building, BuildingAdmin)
admin.site.register(Room)
内联将仅显示当前建筑物中的房间(这就是我想要的)。但是,问题在于,对于inside_room
下拉菜单,它显示了“房间”表中的所有房间(包括其他建筑物中的房间)。
在的内联中rooms
,我需要将inside_room
选择限制rooms
在当前的范围内building
(当前正在由主BuildingAdmin
表单更改的建筑记录)。
我既找不到limit_choices_to
模型中的方法,也无法找出如何正确地正确覆盖管理员的内联表单集(我觉得我应该以某种方式创建自定义内联表单,并传递将主表单设置为自定义内联,然后根据该字段将查询集限制为该字段的选择-但我只是无法将精力集中在如何做上)。
也许这对于管理站点来说太复杂了,但是似乎总会有用...