显示没有输入字段的 Django 表单
Posted
技术标签:
【中文标题】显示没有输入字段的 Django 表单【英文标题】:Django Forms Showing No Input Fields 【发布时间】:2018-05-21 23:43:04 【问题描述】:我看到的不是整个表单,而是提交按钮而不是表单字段
目标:让表单字段加载并能够提交表单。
views.py 文件
from django.shortcuts import render
from django.template.response import TemplateResponse
from django.views import generic
from friendsbook.models import Status,User
from django.views.generic.edit import CreateView
from .forms import CreatePost
class IndexView(generic.ListView):
template_name='uposts/home.html'
context_object_name='status_object'
def get_queryset(self):
return Status.objects.all()
class post_detail(generic.DetailView):
model=Status
context_object_name='user_profile'
template_name='uposts/detail.html'
def get_queryset(self):
abc=Status.objects.all()
return abc;
def create_post(request):
form=CreatePost()
return render(request,"uposts/createpost.html",'form':form)
forms.py 文件
from django import forms
from friendsbook.models import Status
class CreatePost(forms.Form):
class meta:
model=Status
fields = ("title","username" )
createpost.html指定文件夹内的文件
% extends "friendsbook/structure.html" %
% block content %
<form action="" method="post">%csrf_token %
form.as_table
<input type="submit" value="Save">
</form>
% endblock %
我也尝试使用 python shell,但它没有用。 看看这个,它给了我空字符串而不是表单字段。
请帮帮我。
【问题讨论】:
【参考方案1】:这里有几个错误。
首先,要从模型创建字段,您的表单需要继承自 forms.ModelForm
,而不是 forms.Form
。
其次,内部类需要调用Meta
,而不是meta
。
【讨论】:
【参考方案2】:由于您没有使用ModelForm
,因此您需要定义field
s。并且您可以摆脱 model = Status
声明。
试试这个:
from django import forms
class CreatePost(forms.Form):
title = forms.CharField()
username = forms.CharField()
class meta:
fields = ("title","username" )
由于不是ModelForm
,form
不知道Status
模型中有哪些字段。而且它无法实例化这些字段(因为它们没有被定义)。
我认为您可能想使用ModelForm
,除非有一些令人信服的理由不这样做。
【讨论】:
以上是关于显示没有输入字段的 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法来更改 Django 表单的日期时间输入字段的格式?