我仍在通过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()
答案 0 :(得分:0)
您的代码结构不完善,很快就会中断。但是,要克服MultiValueDictKeyError
错误,请写下这些:
# 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'