【问题标题】:ModelForm not showing in Django TemplateModelForm 未显示在 Django 模板中
【发布时间】:2015-11-09 21:46:42
【问题描述】:

在 home.html 中,{{form.as_p}} 没有显示表单,不知道是什么问题,但一切似乎都正常。

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>

主 urls.py:

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

urls.py(在 EmployeeManagement 应用中):

  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

【问题讨论】:

    标签: python django django-templates modelform


    【解决方案1】:

    想通了,将 home.html 中的 {{form.as_p}} 更改为 {{form}}。 sycneddb 并重新启动服务器。现在工作

    【讨论】:

      【解决方案2】:

      在 views.py 中,{'form':form} 应该是 {'save':save}

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

      要匹配 urls.py(在 EmployeeManagement 应用中)名称:

      url(r'save$',views.save, name = 'save')
      

      【讨论】:

      • 你好@Haris Sheikh,它的上下文传递给了模板,查看这篇文章了解更多信息是正确的。 stackoverflow.com/a/53059318/14457833
      • 我也有类似的问题,修改后解决了
      猜你喜欢
      • 2013-06-23
      • 2012-05-24
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 2022-01-03
      • 2019-02-20
      相关资源
      最近更新 更多