marvellstFour
marvellstFour

Reputation: 11

Keep getting Django form error "this field is required" even though the field has been filled

I am creating a Django web app and I'm starting out on using Django forms. I keep getting this error even though this project name field is entered.

<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>

Below is my code. I'm not sure on what I'm missing.

index.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>

forms.py:

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

models.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)

views.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
        })

Upvotes: 0

Views: 6762

Answers (3)

Raeesh Rayeen
Raeesh Rayeen

Reputation: 1

Change your form to the following.

<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>  

Forgetting to add enctype="multipart/form-data" is often the cause of the issue.

Upvotes: -1

marvellstFour
marvellstFour

Reputation: 11

I've figured out why the error occurred. It's because of my forms.py.

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

The title should be projectName.

Upvotes: 1

B.Anup
B.Anup

Reputation: 585

Looks like you are not using the form fields that are rendered by django view in your html file. If you are using html inputs in your form, you might need to use ajax for submitting form. Follow the below approach to render django form fields in your html file.

Ref: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>

Upvotes: 0

Related Questions