python - Django - 表单:“模块”对象不可调用错误
问题描述
我正在尝试更新表中的几行。和这个问题一样。我为我的项目修改了代码并试图解决它几天,但它对我不起作用。首先,我在表单中显示 html 页面中的所有现有行。如果是 POST 请求,则尝试保存到数据库中。我这里有 2 个错误。1.如果我使用return render_to_response('module.html',{'modules' : modules})
它会像我想要的那样在 html 页面中显示数据,但是当单击保存按钮时,它会在 POST 请求中给出以下错误:
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
如果我使用
return render(request, 'module.html',{'modules' : modules})
,它甚至没有显示数据,只是在 GET 请求上给出以下错误:Environment: Request Method: GET Request URL: http://127.0.0.1:8000/module/nav-tab/new Django Version: 2.1.3 Python Version: 3.7.1 Installed Applications: ['MyApp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner 34.response = get_response(request) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 126.response = self.process_exception_by_middleware(e, request) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response 124.response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142.response = view_func(request, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/utils/decorators.py" in _wrapped_view 142.response = view_func(request, *args, **kwargs) File "/Users/cem/Documents/Projects/Python/Web/FirstApp/MyApp/views.py" in addmodule 157.return render(request,template_name, args) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/shortcuts.py" in render 36.content = loader.render_to_string(template_name, context, request, using=using) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/loader.py" in render_to_string 62.return template.render(context, request) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/backends/django.py" in render 61.return self.template.render(context) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/base.py" in render 169.with context.bind_template(self): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py" in __enter__ 112.return next(self.gen) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/context.py" in bind_template 246.updates.update(processor(self.request)) Exception Type: TypeError at /module/nav-tab/new Exception Value: 'module' object is not callable
你能帮我找出我的代码有问题吗?
模型.py
class ModuleNames(models.Model):
ModuleName = models.CharField(max_length = 50)
ModuleDesc = models.CharField(max_length = 256)
ModuleSort = models.SmallIntegerField()
isActive = models.BooleanField()
ModuleType = models.ForeignKey(ModuleTypes, on_delete=models.CASCADE, null = True)
slug = models.SlugField(('ModuleName'), max_length=50, blank=True)
class Meta:
app_label = 'zz'
def __unicode__(self):
return self.status
视图.py
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.serializers.json import Serializer
from django.http import HttpResponse
from urllib.parse import urlparse
from django.urls import resolve
from django.http import Http404, HttpResponseRedirect
from django.db import connection
from myapp.models import TableDefinition
from myapp.models import ColumnDefinition
from myapp.models import ModuleNames
from myapp.models import ModuleTypes
from collections import namedtuple
from django.db.models import F
import json
from django.views.decorators.cache import cache_page
from django.views.decorators.csrf import csrf_protect
@cache_page(60 * 15)
@csrf_protect
def addmodule(request,moduletype):
modules=''
if request.method == 'POST':
data = request.POST.dict()
data.pop('csrfmiddlewaretoken', None)
for i in data.items():
obj = ModuleNames.objects.get(id=i[0].split("_")[1])
print(obj)
obj.save()
listmodules = ModuleTypes.objects.get(ModuleType=moduletype)
modules = ModuleNames.objects.all()
print(modules)
return render(request, 'module.html',{'modules' : modules})
模板.html
<table class="table table-striped table-hover table-sm">
<thead>
<tr>
<th width="35px">Id</th>
<th width="50px">Module Name</th>
<th width="50px">Module Desc</th>
<th width="50px">Module Sort</th>
<th width="50px">Is Active?</th>
<th width="50px">Module Type</th>
</tr>
</thead>
<tbody>
<form action="" method="post" accept-charset="utf-8">
{% csrf_token %}
<input type='hidden' name='csrfmiddlewaretoken' value='randomchars'/>
{% for module in modules %}
<tr>
<td>
<label for="module_id">{{ module.id }} </label>
</td>
<td>
<input id="{{ module.id }}" type="text" name="moduleName_{{ module.ModuleName }}" value="{{ module.ModuleName }}">
</td>
<td>
<input id="{{ module.id }}" type="text" name="moduleDesc_{{ module.ModuleDesc }}" value="{{ module.ModuleDesc }}">
</td>
<td>
<input id="{{ module.id }}" type="text" name="moduleSort_{{ module.ModuleSort }}" value="{{ module.ModuleSort }}">
</td>
<td>
<input id="{{ module.id }}" type="text" name="moduleIsActive_{{ module.isActive }}" value="{{ module.isActive }}">
</td>
<td>
<input id="{{ module.id }}" type="text" name="moduleTypeId_{{ module.ModuleType_id }}" value="{{ module.ModuleType_id }}">
</td>
</tr>
{% endfor %}
<tr>
<td>
<!--<input id="module_id" type="text" name="module_id" value="">-->
</td>
<td>
<input id="module_name" type="text" name="module_name" value="">
</td>
<td>
<input id="module_desc" type="text" name="module_desc" value="">
</td>
<td>
<input id="module_sort" type="text" name="module_sort" value="">
</td>
<td>
<input id="module_isactive" type="text" name="module_isactive" value="">
</td>
<td>
<input id="module_typeid" type="text" name="module_typeid" value="">
</td>
</tr>
<tr>
<td colspan="6">
<input type="submit" value="Save">
</td>
</tr>
</form>
</tbody>
</table>
解决方案
推荐阅读
- google-play - Google play 无法识别电子邮件地址(内部测试)
- plot - 你好,你能告诉我如何限制“情节”线的长度
- php - 在 PHP (PDO) 之外获取导致未定义的索引
- typescript - 有没有办法使用打字稿和续集向查询添加选项?
- html - 实时主机服务器上的 Html Css 响应问题
- coq - Coq - 你如何应用匹配子句的暗示?
- python - 减少使用 if's / elif
- mongodb - 跨文档数组元素的MongoDB唯一索引(不跨嵌套文档)
- c++ - 复制构造函数是否有助于 C++ 中的 memcpy?
- javascript - 如何用点击计数值替换图像而不是添加带有点击计数值的图像?(删除图像+添加新图像)