Nelson Mongare
Nelson Mongare

Reputation: 53

Django form fields not loading on template

The form in question won't render the form fields at all despite not raising any exceptions (which I'm assuming means the error is not a view or form error). So my question is, what else might cause such an error ? forms:

class HandInForm(forms.ModelForm):
    class Meta:
        model = AssignmentsHandedIn
        fields = ['assignment', 'user_hand_in']
class ResourceForm(forms.ModelForm):
    """Form definition for File."""
    class Meta:
        """Meta definition for Fileform."""

        model = Resources
        fields = ['file']
        widgets = {
            'file': forms.FileInput(attrs={"class": "form-control input"}),
        }

view:

def hand_in(request, assignment_id):
    assignment_actual = Assignments.objects.get(pk=assignment_id)
    class_assignment = assignment_actual.class_related
    if request.method == "POST":
        assignment_form = HandInForm(data=request.POST)
        resource_form = ResourceForm(data=request.POST)
        if assignment_form.is_valid() and resource_form.is_valid():
            assignment = assignment_form.save()
            assignment.user_hand_in = request.user
            assignment.assignment = assignment_actual
            resource = resource_form.save()
            resource.assignments = assignment
            resource.class_related = class_assignment
        else:
            print(assignment_form.errors, resource_form.errors)
    else:
        assignment_form = HandInForm()
        resource_form = ResourceForm()
    return render(request, "DC/handin.html", {'assignment_form': assignment_form, 'resource_form': resource_form})

Template:

    {% extends "DC/base.html" %}
    {% block body_block %}
    <br><br><br><br>
    <h1 class="titley">New Resource</h1>
    <form class="jumbotron" enctype="multipart/form-data" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn btn-primary" name="button">Create</button>
    </form>
    <script>
        var editor = new MediumEditor('.editable');
    </script>

    {% endblock body_block %

}

Upvotes: 0

Views: 87

Answers (2)

Lemayzeur
Lemayzeur

Reputation: 8525

That's because you name your forms HandInForm() ResourceForm() respectively:

assignment_form = HandInForm()
resource_form = ResourceForm()

However, you use the name form in templates

{{ form.as_p }}

use instead:

{{ assignment_form.as_p }}

{{ resource_form.as_p }}

Upvotes: 2

seuling
seuling

Reputation: 2966

Your view sends your form with different names.

{'assignment_form': assignment_form, 'resource_form': resource_form}

But you call form using form. You should use your defined name. like

{{ assignment_form.as_p }}, {{ resource_form.as_p }}

Upvotes: 0

Related Questions