【问题标题】:Possible to incorporate select tag in django form?可以在 django 形式中合并选择标签吗?
【发布时间】:2016-09-01 12:25:24
【问题描述】:

我有一个在 html 页面上呈现的 django 表单,并且我有一个执行过滤功能的选择下拉菜单。我想知道是否可以将此选择标签合并为我的表单的一部分?我希望选择标签成为 routestep_form 的一部分。

                  <center>        
                  <form class ="subtitle" method = 'POST' action="{% url 'buildpage:partrequestinfo' %}" enctype="multipart/form-data">{% csrf_token %}
                  {{routestep_form.as_p}}

                  <select name = "myselect" id="id_step" onchange="getOptions(this.value)">
                  <option value="-----">-----</option>
                  {% for step in steps %}
                  <option value="{{ step }}">{{ step }}</option>
                  {%  endfor %}
                  </select>
                  <br/><br/>
                  <select id="id_step_option">
                  <option value="-----">-----</option>
                  </select>

                  <input type='submit' value='Next'/>
                  </form>
                  </center> 

我的表格:

class RouteStepForm(forms.ModelForm):

    class Meta:
        model = RouteStep
        fields = '__all__'
        widgets = {
            'step': Select,
            'step_option': Select,
        }

        error_messages = {
            NON_FIELD_ERRORS: {
                'unique_together': "%(RouteStep)s %(description)s are not unique.",
            }
        }

视图:其他表单是我在同一页面上的表单,但我主要关注的是 RouteStepForm。

def partrequestinfo(request):
    steps = Step.objects.all()
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    req_form = PartRequestForm(request.POST or None, request.FILES or None)
    step_form = StepForm(request.POST or None, request.FILES or None)
    stepoption_form = StepOptionForm(request.POST or None, request.FILES or None)
    routestep_form = RouteStepForm(request.POST or None, request.FILES or None)

    if req_form.is_valid() and step_form.is_valid() and stepoption_form.is_valid() and routestep_form.is_valid():
            instance = req_form.save(commit=False)
            instance.user = request.user
            instance.save()
            step = step_form.save(commit=False)
            step.save()
            stepoption = stepoption_form.save(commit=False)
            stepoption.save()
            routestep = routestep_form.save(commit=False)
            routestep.save()
            messages.success(request, "Successfully Created")
            return HttpResponseRedirect(instance.get_absolute_url())
    else: 
        context = {
                "req_form": req_form,
                "step_form": step_form,
                "stepoption_form": stepoption_form,
                "routestep_form": routestep_form,
                "steps": steps,
        }

    return render(request, "buildpage/partrequestinfo.html", context)

型号:

class Step(models.Model):
    name = models.CharField(_('Step Name'), max_length=100, default='')
    def __unicode__ (self):
            return self.name

class StepOption(models.Model):
    step = models.ForeignKey(Step, related_name = 'Step', null = True)
    name = models.CharField(_('Step Option'), max_length=100, default='')
    def __unicode__ (self):
            return self.name + " - " + self.step.name

class RouteStep(models.Model):
    step_number = models.PositiveIntegerField(_('Step Number'), default = 0)
    step =  models.ForeignKey(Step, related_name = 'Step+', null = True)    
    step_option = models.ForeignKey(StepOption, related_name = 'StepOption', null=True)
    def __unicode__ (self):
            return self.step_option

【问题讨论】:

  • 您的表格在哪里?你用过django内置表单api吗?
  • 添加了我的表单,仅使用 django 表单制作了表单
  • 请同时添加您的 view.py 和 model.py
  • 完成,其他表格只是带有要输入的简单信息的表格。我唯一的问题是创建类似 select 标记的东西,或者将其合并到我的表单中。
  • 好的,让我们来解决这个问题。

标签: javascript html django forms


【解决方案1】:

试试:

class RouteStepForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        self.fields['step'].widget.choices=[ query.name for query in Step.objects.all()]) 

如果它不起作用,请发布您显示的模板代码。

编辑

我编辑了我的答案,也发现这很有帮助。Why do I get an object is not iterable error? 和这个Getting object not iterable error in django form

另一个解决方案是Can not iterate a ChoiceField with Select as widget

【讨论】:

  • 您好,感谢您到目前为止的帮助,收到错误:'Step' object is not iterable
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 2012-09-18
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多