【问题标题】:how to select box value can be change in django?如何选择框值可以在 django 中更改?
【发布时间】:2014-04-13 15:47:57
【问题描述】:

我有两个选择框,一个是country,另一个是state。这两个值都可以访问数据库。我选择了国家/地区选择框,然后自动更改与该国家/地区选择框相关的另一个选择框值。

示例:我选择了国家印度,然后自动获取另一个选择框的值状态。我正在使用ajax获取值。

def constituency1(request):
    country= Loksabha.objects.values('country_name').distinct('country_name')
    terms = Loksabha.objects.values('lok_sabha').distinct('lok_sabha')
    states=Loksabha.objects.values('state_name').distinct('state_name')
    if 'p1' in request.GET and request.GET['p1']:
        p1 = request.GET['p1']
        states=Loksabha.objects.values('state_name').distinct('state_name').filter(country_name='p1')

    if 'p2' in request.GET and request.GET['p2']:
        p2 = request.GET['p2']          
        state_filter = Loksabha.objects.filter(state_name=p1,constituency_name=p2)

【问题讨论】:

    标签: javascript jquery django django-views


    【解决方案1】:

    这个问题已经被问过好几次了。

    这里有一个例子: Conditional field in form

    我是这样做的: 1) 创建 js 脚本,在选择更改时触发 GET 请求。

    2) 在视图中,您将 request.GET 传递给表单,而不是 request.POST

    3) 在表单初始化方法中,您可以更新第二个字段的可能值 - 参见示例。

    4) View 再次返回设置了第一个选择并且第二个选择只有选项的页面,第一个选择允许。

    【讨论】:

      【解决方案2】:

      您需要使用一点 AJAX/JQuery。

      #models.py
      class Country(models.Model):
           country = models.CharField(max_length=20)
      
      class State(models.Model):
          state = models.Charfield(max_length=20)
          country = models.ForeignKey(state)
      
      #views.py
      def filter (request):
          try:
              kwargs = {smart_str('country'): request.GET['q']}
          except KeyError:
              raise Http404
          qs = State.objects.filter(**kwargs).values('pk', 'name')
          response = HttpResponse(
              content=dumps(list(qs)),
              mimetype='application/json'
          )
          return response
      
      
      
      #urls.py
      urlpatterns = patterns('',
               url(r'^locations/filter/state-by-country/$', 'filter',  name='state_filter')
              ...
      )
      

      将此添加到您的模板中

      //JQuery chained select plugin
      $(function() {
        $('#id_state').chainedSelect({
          parent: '#id_country',
          url: 'locations/filter/find-by-country',
          value: 'id',
          label: 'name'
        });
      });
      

      【讨论】:

        猜你喜欢
        • 2021-11-27
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多