python – Django管理员.显示分层下拉过滤器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django管理员.显示分层下拉过滤器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1781字,纯文字阅读大概需要3分钟。
内容图文
我有以下型号:
from django.db import models
class State(models.Model):
name = models.CharField(max_length=30)
abbreviation = models.CharField(max_length=2)
def numberOfCities(self):
return self.city_set.count()
def __unicode__(self):
return u"{0} - {1}".format(self.abbreviation, self.name)
class City(models.Model):
name = models.CharField(max_length=40)
state = models.ForeignKey(State)
class Meta:
verbose_name_plural = 'Cities'
def __unicode__(self):
return self.name
class Company(models.Model):
name = models.CharField(max_length=60)
description = models.CharField(max_length=1000)
city = models.ForeignKey(City)
class Meta:
verbose_name_plural = 'Companies'
def __unicode__(self):
return self.name;
正如您所看到的,每个公司都与一个城市相关联,正如您所期望的那样,Django管理员会生成包含城市下拉列表的公司创建表单.但是为了改善用户体验,我希望用户首先选择州,然后城市下拉列表将填充来自该州的城市.有这样做的标准方法吗?
解决方法:
你需要创建一个自定义小部件来选择City模型(也就是说,你的模型应该FK到City而不是State),这个小部件包含两个Select字段,第一个包含Sstates,第二个包含在选择中状态(您需要插入视图以根据状态ID返回城市以填充您的城市选择).
您应该将媒体内部类的小部件设置为链接两个选择的特定.js文件.
在ModelAdmin规范中,将字段的窗口小部件设置为刚刚创建的自定义窗口小部件,它的媒体将自动添加到change_form模板中.
确保您的.js文件查找常规JQuery对象并回退到django.JQuery,这样您就可以在管理员和整个站点中使用相同的小部件.
(function($) {
// Note that this function works only for one widget per page
$('#state').change(function(){
$('#city').load('/cities_by_state/', {id: this.value}); // the endpoint returns HTML
});
})(JQuery||django.JQuery);
我在我的项目中使用的应用程序中做了类似的事情(可变深度达到三个级别),最终的解决方案有点毛茸茸,因为它必须支持每页多个小部件,动态小部件(用于内联),模板标签以各种形式呈现窗口小部件等.
内容总结
以上是互联网集市为您收集整理的python – Django管理员.显示分层下拉过滤器全部内容,希望文章能够帮你解决python – Django管理员.显示分层下拉过滤器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。