Django表单没有在html模板中显示

时间:2018-06-11 23:24:08

标签: python django

我正在尝试在Django模板中创建一个表单,但它只是没有显示字段

这是我的文件

models.py 我在哪里创建了所需的表

class ReportMessage(models.Model):
    sender = models.ForeignKey(UserModel, related_name="report_message_sender", on_delete='CASCADE')
    message = models.ForeignKey(Message, on_delete='CASCADE')
    created_at = models.DateTimeField(auto_now=True)
    reason = models.TextField(max_length=1500)
    is_read = models.BooleanField(default=False)

forms.py 我创建的表单只能编辑表格中的一个字段

class ReportMessageForm(forms.Form):
    class Meta:
        model = ReportMessage
        fields = ['reason', ]

views.py 我在哪里创建了表单

的视图
@login_required
def report_message(request, pk):
    current_user = request.user
    reported_message = get_object_or_404(Message, pk=pk)
    if request.method == "POST":
        report_message_form = ReportMessageForm(request.POST)
        if report_message_form.is_valid():
            model_instance = report_message_form.save(commit=False)
            model_instance.sender = current_user
            model_instance.message = reported_message
            model_instance.save()
            return redirect('report_confirm')
    else:
        report_message_form = ReportMessageForm()

    context = {
        'report_message_form': report_message_form,
    }
    return render(request, 'fostania_web_app/report_message.html', context)


def report_confirm(request):
    return render(request, 'fostania_web_app/report_confirm.html')

urls.py 其中我用于观看的网址

path('report/messages/<int:pk>/', views.report_message, name="report_message"),
path('report/confirm', views.report_confirm, name="report_confirm"),

最后这就是我在 html 模板中使用该表单的方式

{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
     <form action="" method="post" name="ReportMessageForm" align="right">
         {% csrf_token %}
{{ report_message_form }}
         <input type="submit" class="btn btn-success" style="width: 100px;" value="إرسال" />
     </form>
{% endblock %}

然后我在html页面中看到的所有内容都是提交按钮,没有表单标签或输入或任何内容。

2 个答案:

答案 0 :(得分:1)

我认为您的问题出在您的模型表单中,因为您正在使用forms.Form并且您需要使用forms.ModelForm

class ReportMessageForm(forms.ModelForm):
   class Meta:
      model = ReportMessage
      fields = ['reason', ]

答案 1 :(得分:1)

在您的forms.py中,如果您不使用ModelForm,则必须显式声明表单的字段

reason = forms.Charfield()

或者您可以使用继承自您指定的模型的ModelForm。

您应该在使用ModelForm时在Meta类中指定模型。您还可以在Meta类的字段列表中指定模型中的必需字段

Class myform(forms.ModelForm)
   Class Meta:
      model = your_model_name
      fields= [reason,]

干杯 :)