显示没有输入字段的 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,因此您需要定义fields。并且您可以摆脱 model = Status 声明。

试试这个:

from django import forms


class CreatePost(forms.Form):
    title = forms.CharField()
    username = forms.CharField()

    class meta:
        fields = ("title","username" )

由于不是ModelFormform 不知道Status 模型中有哪些字段。而且它无法实例化这些字段(因为它们没有被定义)。

我认为您可能想使用ModelForm,除非有一些令人信服的理由不这样做。

【讨论】:

以上是关于显示没有输入字段的 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种简单的方法来更改 Django 表单的日期时间输入字段的格式?

使用 django 和 ajax 显示表单错误

将 twitter 引导程序与 Django 表单一起使用

Django 表单输入字段样式

django - 动态添加 django 表单字段并保留用户输入

Django - 自定义表单,特别是字段的外观