Python Django,模型形式未呈现
我在django中创建了一个基本的Modelform,但是我的表单没有呈现 tasks.htmlPython 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">
<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为我做了这件事。非常感谢!