【问题标题】:build check box in django在 django 中构建复选框
【发布时间】:2013-05-23 07:35:15
【问题描述】:

views.py

def what(request):
      user = request.user
      report = Report.objects.get(user=user.id)
      reportnotesform=ReportNotes(instance=report)
      reportform = ReportForm(instance=report)
      typeList = Types.objects.filter(user=user, is_active=True,parent_type_id=None)
      list = []
      for type in typeList:
            if not type.parent_type_id:
                 list.append(type)
                 subtype = Types.objects.filter(parent_type_id=type.id, is_active=True)
                 for subtypes in subtype:
                      list.append(subtypes)
      if request.method == 'POST':
            ReportType.objects.filter(report=report).delete()
            checked_ones = [unicode(x) for x in subtype if unicode(x) in request.POST.keys()]
            reportnotesform=ReportNotes(request.POST,instance=report)
            if reportnotesform.is_valid():
                 report=reportnotesform.save(commit=False)     
                 report.user=request.user
                 report.save()
                 for entry in checked_ones:
                      r = ReportType()
                      r.report = report 
                      r.title = entry
                      r.save()
            return redirect('/member/where/')
      checked_ones = [x.title for x in ReportType.objects.filter(report=report)]  
      return render(request, 'incident/what.html',
      {
      'newreport_menu': True,
      'typeList':list,

      'checked_ones':checked_ones,
    #  'typelist': typelist,
      'ReportNotes':reportnotesform,
      'ReportForm':reportform
      }) 

models.py

class ReportType(models.Model):
    report = models.ForeignKey(Report)
    title = models.CharField('Incident Type', max_length=200)

模板

 {% for type in typeList%}
  {% if type.parent_type_id == None %}
  <h1>{{type.title}}</h1>
 {% else %}
 <p><input type="checkbox">{{type.title}}</input></p>
 {% endif %}
{% endfor %}

我正在使用模型表单来动态显示复选框。

这是我从数据库中获取值并显示的视图。由 typelist 对象过滤的值需要显示值以及复选框。对于类型对象,没关系。在 django 中有什么方法可以做到.

【问题讨论】:

    标签: django django-models django-forms django-templates django-admin


    【解决方案1】:

    这应该适合你:

    <h1> {% for type in types %}{{type.title}}<br />{% endfor %}</h1>          
    <form action="" method="post">
    {% for field in typelist %}
    {% if field.title in checked_ones %}
    <label><input type="checkbox" checked="true" name="{{field}}">{{ field }}</label><br /> 
    {% else %}
    <label><input type="checkbox" name="{{field}}">{{ field }}</label><br /> 
    {%endif%}
    {% endfor %} 
    </form>
    
    
    def what(request):
        user = request.user
    
        types = Types.objects.filter(user=user.id, parent_type_id=None).order_by('title')
        typelist=Types.objects.filter(user=user.id,parent_type_id__isnull=False).order_by('title')
        reporttypeForm = ReportTypeForm()
        if request.method == 'POST':
            ReportType.objects.filter(report=#your report).delete()
            checked_ones = [unicode(x) for x in typelists if unicode(x) in request.POST.keys()]
            for entry in checked_ones:
                r = ReportType()
                r.report = # the hardcoded report
                r.title = entry
                r.save()
            ...
            reporttypeForm = ReportTypeForm(request.POST)        
            if reporttypeForm.is_valid():
                reporttypeForm.save()
        checked_ones = [x.title for x in ReportType.objects.filter(report=#your report)]
        return render(request, 'incident/what.html',
            {
                'checked_ones':checked_ones,
                'newreport_menu': True,
                'types':types,
                'typelist': typelist,
                'reporttypeForm':ReportTypeForm
        })
    

    祝你好运!

    【讨论】:

      【解决方案2】:

      在不知道为什么要这样做的情况下,看起来您通过尝试使其动态化来使问题过于复杂化,而您可以使用models.BooleanField(),Django 将自动显示为一个复选框。它会更简单,而且代码也更容易阅读。

      【讨论】:

      • 听起来您可能想为模型添加一个字段以获得该值,并将该字段定义为models.BooleanField(blank=True,null=True)。这样你就可以把它留空,直到你以后使用它。
      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2020-05-28
      • 2011-04-02
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多