Search code examples
pythondjangodjango-templatesmodelform

ModelForm not showing in Django Template


In the home.html, {{form.as_p}} isn't showing the form, can't figure out whats the problem, everything seems right though.

views.py:

class DeptForm(ModelForm):
    class Meta:
        model = Department
        fields = ['dep_name']




def save(request):
    form = DeptForm(request.POST or None)
    return render(request, 'EmpManagement/home.html', {'form':form})   

home.html:

   <div class="messagepop pop">
    <form action = "{% url 'save' %}" method="post" id="new_message" action="/messages">

    {{form.as_p}}
    <p><input type="submit" value="Send Message" name="commit" id="message_submit"/> or <a class="close" href="/">Cancel</a></p>
</form>
</div>

main urls.py:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^employee/', include('EmployeeManagement.urls')),
)

urls.py (in EmployeeManagement app):

  urlpatterns = [
      # ex: /polls/
      url(r'^$', views.home, name='home'),
      url(r'^(?P<emp_id>[-\w]+)/$', views.get_employee,             name='get_employee'),
      ur(lr'^(?P<emp_id>[-\w]+)/(?P<status>[-\w]+)/$',        views.change_status, name='change_status'),
      url(r'save$',views.save, name = 'save')
  ]

models.py:

from django.db import models

    class Department(models.Model):
    dep_name = models.CharField(max_length=50)

    def __unicode__(self):
        return self.dep_name

    class Employee(models.Model):
        STATUS = (
        ('Present', 'Present'),
        ('Absent', 'Absent'),
        ('Suspended', 'Suspended'),
        ('OnLeave', 'OnLeave'),
    )

    name = models.CharField(max_length=50)
    age = models.PositiveIntegerField(default=0)
    email = models.CharField(max_length=30)
    address = models.CharField(max_length=100)
    mobile = models.CharField(max_length=12)
    status = models.CharField(max_length=20, choices=STATUS)
    department_id = models.ForeignKey(Department)
    designation = models.CharField(max_length=10)
    salary = models.PositiveIntegerField(default=0)
    hire_date = models.DateField()
    left_date = models.DateField(null=True, blank=True)

    def check_status(self):
        if self.status == 'Present':
            return "text-success"
        elif self.status == 'Absent':
            return "text-danger"
        elif self.status == 'Suspended':
            return "text-info"
        else:
            return "text-warning"
    def __unicode__(self):
        return self.name

    class EmployeeRecords(models.Model):
        CHANGE_TYPE = (
        ('Promoted', 'Promoted'),
        ('Fired', 'Fired'),
        ('Suspended', 'Suspended'),
        ('Resigned', 'Resigned'),
        ('Leaves', 'Leaves'),
        ('ab','ab')
    )

    employee_id = models.ForeignKey(Employee, null=True, blank=True)
    change_type = models.CharField(max_length=2, choices=CHANGE_TYPE,        null=True, blank=True)
    change_date = models.DateField(null=True, blank=True)
    leave_date = models.DateField(null=True, blank=True)

    def __unicode__(self):
        return self.change_type

Solution

  • Figured it, changed {{form.as_p}} to {{form}} in home.html. SycnedDB and restarted the server. Working now