Django表单显示没有输入字段

时间:2017-12-07 19:22:13

标签: python django forms django-forms django-templates

而不是整个表单我只是看到提交按钮而不是表单字段

目标:获取表单字段以加载并能够提交表单。

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,但它没用。 看看它给我空字符串而不是表单字段。

enter image description here

请帮帮我。

2 个答案:

答案 0 :(得分:1)

这里有几个错误。

首先,要从模型中创建字段,您的表单需要继承forms.ModelForm,而不是forms.Form

其次,内部类需要调用Meta,而不是meta

答案 1 :(得分:1)

由于您未使用ModelForm,因此需要定义field。你可以摆脱model = Status声明。

试试这个:

from django import forms


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

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

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

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