Django 2.0.1:循环创建单选按钮中断"必需"设置

时间:2018-03-19 11:03:38

标签: python django forms validation

我已经在这个问题上挣扎了一段时间,所以我感谢任何帮助,无论多么模糊。

Django 2.0.1:"必需"设置Django用于验证字段是否有效,如果我输入: {{ client_primary_sector }}使用" required"进入适用的html文件通过数据模型(blank=False)或通过forms.py(attrs={"required": "required"})选择的设置。然而,"要求"当我使用for循环生成单选按钮时,设置失败。

请参阅下面的工作和破解示例。

models.py:

class SurveyInstance(models.Model):
    client_primary_sector = models.CharField(choices=PRIMARY_SECTOR, null=True, default='no_selection', blank=False, max_length=100)

请注意上面的`default =' no_selection',它不在PRIMARY_SECTOR选项中,也不会作为用户的选项呈现。这会强制用户在保存数据之前进行选择(我已确认它有效)。

forms.py

class ClientProfileForm(ModelForm):
    class Meta:
        model = SurveyInstance
        fields = ('client_primary_sector',)

        widgets = {'client_primary_sector': forms.RadioSelect(choices=PRIMARY_SECTOR, attrs={"required": "required"}),
              }

views.py

def client_profile_edit(request, pk):

    # get the record details from the database using the primary key
    survey_inst = get_object_or_404(SurveyInstance, pk=pk)

    # if details submitted by user
    if request.method == "POST":

        # get information from the posted form
        form = ClientProfileForm(request.POST, instance=survey_inst)

        if form.is_valid():
            survey_inst = form.save()

            # redirect to Next view:
            return redirect('questionnaire:business-process-management', pk=survey_inst.pk)

    else:
        # Retrieve existing data
        form = ClientProfileForm(instance=survey_inst)

    return render(request, 'questionnaire/client_profile.html', {'form': form})

client_profile.html

  <!-- this works: -->
  <!-- <div class="radio_3_cols">
      {{ form.client_primary_sector }}
  </div> -->

  <!-- this doesn't: -->
  {% for choice in form.client_primary_sector %}
      <div class="radio radio-primary radio-inline">
          {{ choice.tag }}
          <label for='{{ form.client_primary_sector .auto_id }}_{{ forloop.counter0 }}'>{{ choice.choice_label }}</label>
      </div>
  {% endfor %}

您可能想知道我为什么不使用工作解决方案......我希望能够在其他情况下使用for循环逻辑,因此需要一个解决方案。

1 个答案:

答案 0 :(得分:0)

回答了我自己的问题。从2.0的文档: https://docs.djangoproject.com/en/2.0/ref/forms/widgets/#radioselect

正确的语法是:

$request->file('photo')->move(public_path("/uploads"), $newfilename);

不是我之前发现的任何东西。确认工作。 Hoorah!