该模型的逻辑是:
Building
有很多Rooms
Room
可能在另一个内部Room
(例如壁橱-“ self”上的ForeignKey)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
在模型中使用的方法,也无法找出如何正确地正确覆盖管理员的内联表单集(我觉得我应该以某种方式创建自定义内联表单,并传递的building_id将主表单设置为自定义内联,然后根据该字段将查询集限制为该字段的选择-但我只是无法将精力集中在如何做上)。
也许这对于管理站点来说太复杂了,但是似乎总会有用…
将请求实例用作obj的临时容器。重写内联方法formfield_for_foreignkey来修改查询集。这至少在Django 1.2.3上有效。
class RoomInline(admin.TabularInline):
model = Room
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
field = super(RoomInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
if db_field.name == 'inside_room':
if request._obj_ is not None:
field.queryset = field.queryset.filter(building__exact = request._obj_)
else:
field.queryset = field.queryset.none()
return field
class BuildingAdmin(admin.ModelAdmin):
inlines = (RoomInline,)
def get_form(self, request, obj=None, **kwargs):
# just save obj reference for future processing in Inline
request._obj_ = obj
return super(BuildingAdmin, self).get_form(request, obj, **kwargs)
问题内容: 我有一种类似于以下的双向外交关系 我如何将Parent.favoritechild的选择限制为仅其父母为自己的孩子?我试过了 但这会导致管理界面未列出任何子项。 问题答案: 我刚刚在Django文档中碰到。尚不确定这是如何工作的,但在这里可能是正确的事情。 允许指定常量,可调用对象或Q对象以限制键的允许选择。常量在这里显然没有用,因为它对所涉及的对象一无所知。 使用可调用(函数或类方法
问题内容: 与PostgreSQL中的SQL Server或DB2或mySQL等效吗? 问题答案: 您可以像在MySQL中一样使用LIMIT,例如:
问题内容: 我正在一个需要我显示用户每天平均输入次数的图表的网站上。我已经有一个SQL查询,可以向我返回此信息: 这给了我想要的结果,但是结果以三位小数精度给出。我想四舍五入这个数字。我当然可以用PHP或模板引擎来做,但是我很好奇数据库中是否有办法做到这一点。 有没有一种方法可以将输出强制转换为整数(在MySQL中)? 问题答案:
问题内容: 我有4个复选框。我希望用户仅选择其中两个。如何设置该限制? 问题答案: 您可以轻松地使用一个变量来存储当前选中的复选框的数量…然后调用任何时间,检查该变量,如果它已经是要选中的第三个复选框,则只需将其设置为再次取消选中即可。 假设您首先取消选中所有复选框。所以你也是: 然后设置: (我尚未测试过代码,但应该可以。)
问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-)
问题内容: 我有几个预定的人。每个客户只有一个客户,尽管可以为一位客户预订在不同时间发生的多个约会。 现在,当管理员通过查看管理员中的约会(按时间排序)浏览日程表时,有时他们希望查看有关具有特定约会的客户的信息。现在,他们必须记住客户的姓名,从“约会”导航到“客户”管理页面,找到记住的客户,然后才能浏览其信息。 理想情况下,像管理员内联之类的东西会很棒。但是,如果有,我似乎只能在管理页面Custo