尝试写入数据库Django时出错

尝试写入数据库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

我仍在通过Django学习Python,并一直在视图中使用我的大多数方法。有人告诉我,在经理的领导下,把它们放在我的模型中是更好的做法。我有下面的代码获取产品信息,我相信id可以填充我的模型。但这是一个错误。任何帮助都会很好

将内容移动到模型后更新的错误。现在它不会重新初始化request.session

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如果你有时间,我想和你聊天