当我试图呈现一个视图时,我收到一条错误消息“KeyError at/manifest”。我是第一次使用会话,所以我不知道如何解决这个问题。我正在尝试使用会话将字段“reference”从edit_manifest_frombrowse
视图传递到manifest
视图。有人能给我解释一下是什么导致了这个错误,以及为什么我要修正它吗?代码和完整回溯如下:
你知道吗视图.py你知道吗
def edit_manifest_frombrowse(request, pk):
item = get_object_or_404(Manifests, pk=pk)
if request.method == "POST":
form = CreateManifestForm(request.POST, instance=item)
if form.is_valid():
request.session["reference"] = form.cleaned_data["reference"]
return redirect('manifest')
else:
form = CreateManifestForm(instance=item)
return render(request, 'edit_manifest_frombrowse.html', {'form': form})
def manifest(request):
form = CreateManifestForm(request.POST)
if request.method == "POST":
...
reference_id = request.session.pop('reference', None)
data = Manifests.objects.all().filter(reference__reference=reference_id)
form = CreateManifestForm(initial={
'reference': Orders.objects.get(reference=reference_id),
})
total_cases = Manifests.objects.filter(reference__reference=reference_id).aggregate(Sum('cases'))
context = {
'reference_id': reference_id,
'form': form,
'data': data,
'total_cases': total_cases['cases__sum'],
}
return render(request, 'manifest_readonly.html', context)
你知道吗表单.py你知道吗
class CreateManifestForm(forms.ModelForm):
class Meta:
model = Manifests
fields = ('reference', 'cases', 'product_name', 'count', 'CNF', 'FOB')
你知道吗型号.py你知道吗
#form which I am trying to submit
class Manifests(models.Model):
reference = models.ForeignKey(Orders)
#just showing so you can see what the FK reference
class Orders(models.Model):
reference = models.CharField(max_length=50, unique=True)
完全回溯
Request Method: GET
Request URL: http://127.0.0.1:8000/manifest
Django Version: 1.11
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'bootstrap_modal_forms',
'smart_selects',
'unit']
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/Python/2.7/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/andrews/Desktop/WBU/web_unit/unit/views.py" in manifest
325. reference_id = request.session.pop('reference')
File "/Library/Python/2.7/site-packages/django/contrib/sessions/backends/base.py" in pop
73. return self._session.pop(key, *args)
Exception Type: KeyError at /manifest
Exception Value: 'reference'
出现此错误是因为这是pop方法的行为。你知道吗
所以要解决这个问题,可以使用回退来消除这个错误。例如:
逻辑有问题可能是导致此错误的根本原因。你知道吗
如果表单无效,那么会话变量上就没有
reference
,因此无法在manifest
视图中获取它。因此,请尝试重定向到另一个视图或尝试以下操作:当您想使用查询集初始化时,表单还有另一个问题。它将尝试将您的Orders queryset解析为表单的类似JSON的数据,这将提示一个错误。您应该尝试为
reference
字段创建备用字段,并在init方法上为该字段设置queryset,如下所示:然后你可以这样开始你的形式:
希望有帮助!你知道吗
相关问题 更多 >
编程相关推荐