尝试写入数据库Django时出错
我仍在通过Django学习Python,并一直在视图中使用我的大多数方法。有人告诉我,在经理的领导下,把它们放在我的模型中是更好的做法。我有下面的代码获取产品信息,我相信id可以填充我的模型。但这是一个错误。任何帮助都会很好 将内容移动到模型后更新的错误。现在它不会重新初始化request.session尝试写入数据库Django时出错,django,python-2.7,django-models,Django,Python 2.7,Django Models,我仍在通过Django学习Python,并一直在视图中使用我的大多数方法。有人告诉我,在经理的领导下,把它们放在我的模型中是更好的做法。我有下面的代码获取产品信息,我相信id可以填充我的模型。但这是一个错误。任何帮助都会很好 将内容移动到模型后更新的错误。现在它不会重新初始化request.session Traceback: File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\sit
Traceback:
File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\exception.py" in inner
42. response = get_response(request)
File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\dbhol\Desktop\blackbelttest ver 1\blackbelttest\apps\blackbeltapp\views.py" in create
43. viewsResponse = Myblackbelt.objects.add_product(request.POST)
File "C:\Users\dbhol\Desktop\blackbelttest ver 1\blackbelttest\apps\blackbeltapp\models.py" in add_product
9. secreteid= User.objects.get(id=request.session['loguser_id'])
Exception Type: NameError at /blackbelt/create
Exception Value: global name 'request' is not defined
Html matters
<form class="" action="{% url 'blackbelt:create' %}" method="post">
{% csrf_token %}
<p>Product: <input type="text" name="product" value=""></p>
<input type="submit" name="" value="Create">
</form>
view.py that matters
def create(request):
viewsResponse = Myblackbelt.objects.add_product(request.POST)
return redirect ('blackbelt:index')
Models in full
from __future__ import unicode_literals
from django.db import models
from ..logReg.models import User
class ProductManager(models.Manager):
def add_product(self, postData):
print 'dog here'
secreteid= User.objects.get(id=request.session['loguser_id'])
Myblackbelt = self.create(product = postData['product'], creator=secreteid)
class Myblackbelt(models.Model):
product = models.CharField(max_length = 70)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
loguser = models.ManyToManyField(User, related_name='loguser')
creator = models.ForeignKey(User, related_name='creator')
objects = ProductManager()
回溯:
文件“C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvironments\djangenv\lib\site packages\django\core\handlers\exception.py”位于内部
42响应=获取响应(请求)
文件“C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvironments\djangenv\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
187response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvironments\djangenv\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
185响应=包装的回调(请求,*回调参数,**回调参数)
创建中的文件“C:\Users\dbhol\Desktop\blackbelttest ver 1\blackbelttest\apps\blackbeltapp\views.py”
43viewsResponse=Myblackbelt.objects.add\u产品(request.POST)
add\u产品中的文件“C:\Users\dbhol\Desktop\blackbelttest ver 1\blackbelttest\apps\blackbeltapp\models.py”
9secretId=User.objects.get(id=request.session['loguser\u id'])
异常类型:name错误位于/blackbelt/create
异常值:未定义全局名称“请求”
Html很重要
{%csrf_令牌%}
产品:
view.py这很重要
def创建(请求):
viewsResponse=Myblackbelt.objects.add\u产品(request.POST)
返回重定向('黑带:索引')
全套模型
从未来导入unicode文字
从django.db导入模型
从..logReg.models导入用户
类ProductManager(models.Manager):
def添加_产品(自身、postData):
打印“狗在这里”
secretId=User.objects.get(id=request.session['loguser\u id'])
Myblackbelt=self.create(product=postData['product'],creator=secretid)
类别Myblackbelt(models.Model):
产品=型号.CharField(最大长度=70)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
loguser=models.ManyToManyField(用户,相关的\u name='loguser')
creator=models.ForeignKey(用户,相关的_name='creator')
对象=ProductManager()
您的代码结构不好,很快就会崩溃。但是,要克服多值DictKeyError
错误,请编写以下代码:
# views.py
def create(request):
if request.method == 'POST':
viewsResponse = Myblackbelt.objects.add_product(request.POST)
secreteid= User.objects.get(id=request.session['user_id'])
return redirect ('blackbelt:index')
class ProductManager(models.Manager):
def add_product(self, postData):
# always set a default value if dict key is not found
# of course you must (also) check if postData is of type dict
product = postData.get('product', None)
creator_id = postData.get('loguser_id', None)
if product is not None and creator_id is not None:
creator = User.objects.get(id=creator_id)
Myblackbelt = self.create(product=product, creator=creator)
print 'dog here'
问题是,您的POST dict上没有
product
键。在您的情况下,您应该检查如何将SecretID
传递到creator
字段?对于学校,他们希望您制作表单,并希望我们自己登录和nik def添加产品(self,postData):print'dog here'secretid=User.objects.get(id=request.session['loguser\u id'])Myblackbelt=self.create(product=postData['product'],creator=secretid)nik如果你有时间,我想和你聊天