我正在尝试在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页面中看到的所有内容都是提交按钮,没有表单标签或输入或任何内容。
答案 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,]
干杯 :)