Логика модели такова:
- A
Building
имеет многоRooms
- A
Room
может находиться внутри другогоRoom
(например, шкаф, например ForeignKey on self) - 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 (в том числе в других зданиях).
В строке Rooms
мне нужно ограничить выбор inside_room
только Rooms
, которые находятся в текущем Building
(запись здания в настоящее время изменяется основной формой BuildingAdmin
).
Я не могу понять, как это сделать с помощью limit_choices_to
в модели, и я не могу понять, как правильно переопределить встроенный набор форм администратора (я чувствую, что должен каким-то образом создать пользовательский встроенный формы, передайте build_id основной формы в пользовательский встроенный, а затем ограничьте набор запросов для выбора полей на основе этого, но я просто не могу обернуть вокруг себя, как это сделать).
Возможно, это слишком сложно для сайта администратора, но кажется, что это вообще полезно...