xadmin获取页面上表单的当前值,并动态修改下方表单的选择项
django吧
全部回复
仅看楼主
level 2
d1017555 楼主
我在做一个资产系统,简述下表结构:机房,机柜,服务器,网络设备,IP
机柜表有一个外键连到机房
服务器有一个外键连到机房一个外键连到机柜
网络设备同服务器
IP表有一个外键连到机房
我想达到的效果是,维护IP的时候选择机房,然后底下的设备能自动筛选出该机房的所有服务器和网络设备,并作为下拉菜单供选择。
而我目前仅仅通过get_All_Device方法筛选出了所有的服务器和网络设备,数据多的情况下选择非常不方便,请教下大家,有什么好的处理方式么,谢谢。(如果用AJAX的话应该修改xadmin的哪个页面?)
精简后表结构如下:
class IDC_Mstr(models.Model):
"""
机房表
"""
IDC_Name = models.CharField(
verbose_name=u'机房名称',
max_length=Length_Name,
db_index=True,
)
class Rack_Mstr(models.Model):
"""
机柜表
"""
Rack_IDC = models.ForeignKey(
verbose_name=u'机房',
to=IDC_Mstr,
db_index=True,
)
Rack_Name = models.CharField(
verbose_name=u'机柜名称',
max_length=Length_Name,
db_index=True,
)
class Server_Mstr(models.Model):
"""
服务器表
"""
Server_IDC = models.ForeignKey(
verbose_name=u'机房',
to=IDC_Mstr,
db_index=True,
)
Server_Rack = models.ForeignKey(
verbose_name=u'机柜',
to=Rack_Mstr,
db_index=True,
)
Server_Name = models.CharField(
verbose_name=u'服务器名称',
max_length=Length_Name,
db_index=True,
class Network_Mstr(models.Model):
"""
网络设备表
""
Network_IDC = models.ForeignKey(
verbose_name=u'机房',
to=IDC_Mstr,
db_index=True,
)
Network_Rack = models.ForeignKey(
verbose_name=u'机柜',
to=Rack_Mstr,
db_index=True,
)
Network_Name = models.CharField(
verbose_name=u'设备名称',
max_length=Length_Name,
db_index=True,
)
def get_All_Device():
ret = []
try:
for obj in Server_Mstr.objects.all():
ret.append((obj.Server_Name, obj.Server_Name,))
for obj in Network_Mstr.objects.all():
ret.append((obj.Network_Name, obj.Network_Name,))
except:
pass
return ret
class Extranet_Mstr(models.Model):
"""
外网表
"""
def __init__(self, *args, **kwargs):
super(Extranet_Mstr, self).__init__(*args, **kwargs)
self._meta.get_field_by_name('Extranet_Device')[0]._choices = lazy(get_All_Device,list)()
Extranet_IDC = models.ForeignKey(
verbose_name=u'机房',
to=IDC_Mstr,
db_index=True,
)
Extranet_IP = models.GenericIPAddressField(
verbose_name=u'IP地址',
unique=True,
db_index=True,
)
2015年08月17日 01点08分 1
level 2
d1017555 楼主
百度编辑后代码的锁进没了,但应该能看得懂,难为给位了
2015年08月17日 01点08分 2
1