首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django表单未在html模板中显示

Django表单未在html模板中显示
EN

Stack Overflow用户
提问于 2018-06-12 07:24:08
回答 2查看 2.5K关注 0票数 1

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

这是我的文件

我在其中创建了所需表的models.py

代码语言:javascript
复制
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,我在其中创建了一个表单,以便仅编辑表中的一个字段

代码语言:javascript
复制
class ReportMessageForm(forms.Form):
    class Meta:
        model = ReportMessage
        fields = ['reason', ]

我在其中创建表单视图的views.py

代码语言:javascript
复制
@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,其中我用于视图的urls

代码语言:javascript
复制
path('report/messages/<int:pk>/', views.report_message, name="report_message"),
path('report/confirm', views.report_confirm, name="report_confirm"),

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

代码语言:javascript
复制
{% 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页面上看到的只有提交按钮,没有表单标签或输入或其他任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-12 10:50:16

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

代码语言:javascript
复制
reason = forms.Charfield()

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

您应该在元类中指定模型,而使用ModelForm.You还可以在元类的字段列表中指定模型中的必填字段

代码语言:javascript
复制
Class myform(forms.ModelForm)
   Class Meta:
      model = your_model_name
      fields= [reason,]

干杯:)

票数 2
EN

Stack Overflow用户

发布于 2018-06-12 10:25:15

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

代码语言:javascript
复制
class ReportMessageForm(forms.ModelForm):
   class Meta:
      model = ReportMessage
      fields = ['reason', ]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50807332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档