Django 依赖选择 [英] Django dependent select
本文介绍了Django 依赖选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道这个问题有很多答案,但我是 Django 新手,我不知道如何实现这些解决方案.首先我想做什么.这是我的模型:
class Region(models.Model):name = models.CharField(max_length=255,verbose_name=_("Name"))slug = models.SlugField(max_length=150, unique=True, null=True)def save(self,*args, **kwargs):如果不是 self.slug:self.slug = slugify(self.name)super(Region,self).save(*args,**kwargs)def __unicode__(self):返回你'%s' % (self.name)元类:verbose_name = _('地区')verbose_name_plural = _('区域')类区(models.Model):name = models.CharField(max_length=255,verbose_name=_("Name"))slug = models.SlugField(max_length=150, unique=True, null=True)region = models.ForeignKey(Region,verbose_name=_("Region"))def save(self, *args, **kwargs):如果不是 self.slug:self.slug = slugify(self.name)超级(区,自我).保存(*args,**kwargs)def is_in_region(self, region):如果 self.region == 区域:返回真别的:返回错误def __unicode__(self):返回你'%s' % (self.name)元类:verbose_name = _("区")verbose_name_plural = _("地区")
在前端页面我想选择一个地区,选择地区会显示该地区的地区.这是我的观点:
class SearchView(ListView):template_name = '广告/list_view.html'def all_json_models(self, request, region):current_reg = Region.objects.get(slug=region)地区 = District.objects.all().filter(region=current_reg)json_models = serializers.serialize("json", 区)返回 http.HttpResponse(json_models, mimetype="application/javascript")def get(self, request, *args, **kwargs):返回 self.post(request, *args, **kwargs)def post(self, request, *args, **kwargs):self.request = 请求尝试:self.page = int(self.request.GET.get('page','1'))除了:self.page = 1self.queryset = ""return super(SearchView, self).get(request, *args, **kwargs)def get_queryset(self):"""我们必须绕过查询集,因为我们将几个对象列表连接在一起."""返回无def get_context_data(self, **kwargs):context['regions'] = Region.objects.all().order_by("name")返回上下文
get_context_data 方法要长得多,但我在这里只写了一个简单的方法.我从这个网站使用这个解决方案 上:https://github.com/nodet07/Django-Related-DropDowns)
models.py:
2个简单的模型,一个国家可以有很多城市!
from django.db 导入模型类城市(模型.模型):name = models.CharField(max_length=50)country = models.ForeignKey("国家")def __unicode__(self):返回你'%s' % (self.name)类国家(模型.模型):name = models.CharField(max_length=50)def __unicode__(self):返回你'%s' % (self.name)
views.py:
from django.shortcuts 导入渲染从 map.models 导入 *从 django.utils 导入 simplejson从 django.http 导入 HttpResponse定义索引(请求):国家 = Country.objects.all()印刷国家返回渲染(请求,'index.html',{'国家':国家})定义获取详细信息(请求):#country_name = request.POST['country_name']country_name = request.GET['cnt']打印 "ajax country_name ", country_name结果集 = []all_cities = []答案 = str(country_name[1:-1])selected_country = Country.objects.get(name=answer)打印选定的国家名称",selected_countryall_cities = selected_country.city_set.all()对于 all_cities 中的城市:打印城市名称",city.nameresult_set.append({'name': city.name})返回 HttpResponse(simplejson.dumps(result_set), mimetype='application/json', content_type='application/json')
index.html :
<头><script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script><script type="text/javascript" src="http://yourjavascript.com/7174319415/script.js"></script><脚本>$(document).ready(function(){$('select#selectcountries').change(function () {var optionSelected = $(this).find("option:selected");var valueSelected = optionSelected.val();var country_name = optionSelected.text();数据 = {'cnt' : country_name };ajax('/getdetails',data,function(result){控制台日志(结果);$("#selectcities 选项").remove();for (var i = result.length - 1; i >= 0; i--) {$("#selectcities").append('');};});});});头部><身体><选择名称=选择国家"id=选择国家">{% 在国家/地区的项目 %}<option val="{{ item.name }}">{{ item.name }} </option>{% 结束为 %}</选择><选择名称="selectcities" id="selectcities"></选择>