即使该字段已被填充,仍不断收到Django表单错误“此字段为必填字段”

kh212irz  于 2023-01-03  发布在  Go
关注(0)|答案(3)|浏览(146)

我正在创建一个Django Web应用程序,并且刚开始使用Django表单。即使输入了这个项目名称字段,我还是不断收到这个错误。

<tr><th><label for="id_title">projectName:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="title" maxlength="100" required id="id_title"></td></tr>

下面是我的代码。我不知道我错过了什么。

    • 索引. html:**
<form id="project_form" action="{% url 'createproject' %}" method="post">
  {% csrf_token %}
      <div class="form-group row">
          <label for="projectName" class="col-sm-2 col-form-label">Project Name:</label>    &nbsp;
          <div class="col-sm-9">
              <input type="text" class="form-control" placeholder="Enter Project Name" name="projectName" id="projectName">
          </div> 
      </div> 
      <input type="submit" class="btn btn-primary" id="submit-project-btn">
</form>
    • 表格. py:**
class CreateEditProjectForm(forms.Form):
    title = forms.CharField(label="projectName", max_length=100, required=True)
    • 型号. py:**
class TestProject(models.Model):
    creator = models.ForeignKey(User,on_delete=models.CASCADE,related_name="testcreatorId") 
    projectName = models.CharField(max_length=200, default=None)

    created_dt = models.DateTimeField(auto_now_add=True, auto_now=False)
    last_modified_dt = models.DateTimeField(auto_now_add=False, auto_now=True)
    • 浏览次数. py:**
def create_project(request):
    print("in create_project")
    print(request.method)
    if (request.method == "POST"):
        form = forms.CreateEditProjectForm(request.POST)
        print(form) 
        if form.is_valid():
            projectName = form.cleaned_data["projectName"]
            print(projectName)
            if (len(projectName) > 0):
                creator = User.objects.get(id=request.session['_auth_user_id'])
                project = TestProject(projectName=projectName, creator=creator)
                print(project)
                project.save()
                return HttpResponseRedirect(reverse("index"))
            return render(request, "index.html", {
                "form": form
            })
        return render(request, "index.html", {
            "form": form
        })
    else:
        form = forms.CreateEditProjectForm()
        return render(request, "index.html", {
            "form": form
        })
oxf4rvwz

oxf4rvwz1#

我已经知道为什么会出现这个错误了。这是因为我的forms.py。

class CreateEditProjectForm(forms.Form):
    title = forms.CharField(label="projectName", max_length=100, required=True)

title应该是projectName

wfypjpf4

wfypjpf42#

看起来你没有使用django视图在html文件中呈现的表单域。如果你在表单中使用html输入,你可能需要使用ajax来提交表单。按照下面的方法在html文件中呈现django表单域。
参考:https://docs.djangoproject.com/en/4.0/topics/forms/

<form id="project_form" action="{% url 'createproject' %}" method="post">
        {% csrf_token %}
        <div class="form-group row">
            <label for="{{ form.title.id_for_label }}">Project Name:</label>
            <div class="col-sm-9">
                {{form.title}}
            </div>
        </div>
        <input type="submit" class="btn btn-primary" id="submit-project-btn">
    </form>
yzuktlbb

yzuktlbb3#

将您的表单更改为以下格式。

<form method="POST" class="post-form" enctype="multipart/form-data">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>

忘记添加enctype="multipart/form-data"通常是导致此问题的原因。

相关问题