Python Django,模型形式未呈现

Python Django,模型形式未呈现,python,django,render,modelform,Python,Django,Render,Modelform,我在django中创建了一个基本的Modelform,但是我的表单没有呈现 tasks.html <table class="..."> <tr> <th>Function</th> </tr> <tr> <td> <form method="POST">

我在django中创建了一个基本的Modelform,但是我的表单没有呈现

tasks.html

<table class="...">
        <tr>
            <th>Function</th>
        </tr>
        <tr>
            <td>
                <form method="POST">
                    {% csrf_token %}
                    {{ form }}
                    <button type="submit">Execute</button>
                </form>
            </td>
        </tr>
</table>
forms.py

class Tasks(models.Model):

    #Task module 

    function_name = models.CharField(max_length=30, default='')
    script_location = models.CharField(max_length=300, default='')
from django.forms import ModelForm

from .models import Tasks

class Tasks(ModelForm):

    class Meta:
        model = Tasks
        fields = ['function_name','script_location']
class Tasks(View):

    def get(self, request):
        form = Tasks()
        return render(request, '.../tasks.html', {'form': form})
视图.py

class Tasks(models.Model):

    #Task module 

    function_name = models.CharField(max_length=30, default='')
    script_location = models.CharField(max_length=300, default='')
from django.forms import ModelForm

from .models import Tasks

class Tasks(ModelForm):

    class Meta:
        model = Tasks
        fields = ['function_name','script_location']
class Tasks(View):

    def get(self, request):
        form = Tasks()
        return render(request, '.../tasks.html', {'form': form})

我只想看到两个文本字段,但我只看到“执行”按钮:避免名称冲突。在窗体和视图中添加后缀

您命名了模型
Tasks
、表单
Tasks
和视图
Tasks
。在这里,视图中的
Tasks()
调用将解析为该视图,因此:

class Tasks(View):

    def get(self, request):
        form = Tasks()
        return render(request, '.../tasks.html', {'form': form})
然而,在这里,您基本上实现了一个,如:

从django.url导入反向
从django.views.generic.edit导入CreateView
类TaskView(CreateView):
模型=任务
字段=('function\u name','script\u location')
模板名称=“…/tasks.html”
success\u url=reverse\u lazy(“特定视图”)
对于GET请求,这将在上下文中使用
表单
呈现模板。它还将推动一个POST请求,该请求将创建一个模型对象并将其保存到数据库,然后重定向到
特定视图
。因此,它将为您实现许多样板代码。

更改表单。py

from django.forms import ModelForm
from .models import Tasks
class TasksForms(ModelForm):
    class Meta:
        model = Tasks
        fields = ('function_name','script_location',)
在应用程序url.py中添加url

path('your_url/', views.TaskView, name='task'),
更改您的视图.py

def TaskView(request) :

    def get(self, request):
        form = TasksForms()
        return render(request, '.../tasks.html', {'form': form})

不要忘了在tasks.html中添加表单的操作,但是现在您使用内部方法
get
TaskView
转换为基于函数的视图。不仅
get
方法不会被调用(除非您明确地调用它),它还会导致一个无用的内部方法(例如,它不能被pickle)。CreateView为我做了这件事。非常感谢!