2014-01-10 79 views
4

我正在設計一個簡單的MCQ應用程序,使用django網站django版本1.6.1中的ManyToOne關係。我有一個內聯管理員表單,它可以讓我添加/編輯來自同一個變更表單的給定問題的答案。但是,如果在使用其答案保存問題後,我無法編輯/添加來自同一表單的答案並獲取MultiValueDictKeyError。我的模型是:MultiValueDictKeyError當編輯內聯管理對象

class SBA (models.Model): 
question = models.TextField(blank=False) 
system = models.CharField(max_length=3, choices=pacscon.System.which_system) 
case = models.ForeignKey('pacscon.Patient') 
created = models.DateField(auto_now_add=True) 
reference = models.TextField(blank=True) 

def __unicode__(self): 
    return self.question 


class Answer(models.Model): 
id = models.AutoField(primary_key=True) 
body = models.TextField() 
correct = models.BooleanField(default=False) 
sba = models.ForeignKey(SBA, null=True) 

def __unicode__(self): 
    return self.body 

的admin.py如下:

from models import Answer, SBA, Mnemonic 
#from django import forms 
from django.contrib import admin 


class AnswerInline(admin.StackedInline): 
    model = Answer 
    extra = 2 

class SBAAdmin(admin.ModelAdmin): 
     fieldsets = (
      (None, { 
       'fields': ('question', 'system', 'case', 'reference') 
      }), 
     ) 
     inlines = [ 
      AnswerInline, 
     ] 
     readonly_fields = ('created',) 

admin.site.register(SBA, SBAAdmin) 
admin.site.register(Answer) 
admin.site.register(Mnemonic) 

和錯誤消息是:

MultiValueDictKeyError at /admin/knowledge/sba/1/ 


Traceback: 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper 
    432.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 
    99.      response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    52.   response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner 
    198.    return view(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 
    99.      response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 
    25.     return func(self, *args2, **kwargs2) 
File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py" in inner 
    339.     return func(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in change_view 
    1229.    if all_valid(formsets) and form_validated: 
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in all_valid 
    415.   if not formset.is_valid(): 
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in is_valid 
    292.   err = self.errors 
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in errors 
    267.    self.full_clean() 
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in full_clean 
    314.    form = self.forms[i] 
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in __get__ 
    49.   res = instance.__dict__[self.func.__name__] = self.func(instance) 
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in forms 
    133.   forms = [self._construct_form(i) for i in xrange(self.total_form_count())] 
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in _construct_form 
    848.   form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in _construct_form 
    564.    pk = self.data[pk_key] 
File "/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py" in __getitem__ 
    301.    raise MultiValueDictKeyError(repr(key)) 

Exception Type: MultiValueDictKeyError at /admin/knowledge/sba/1/ 
Exception Value: "u'answer_set-0-id'" 

我已經搜索在谷歌類似的請求,計算器,我的django包完全保持最新狀態(包括其他答案中建議的管理內聯模板)。將感謝任何幫助。謝謝

P.S這幾乎可以肯定是一個錯誤,因爲我可以在使用類似的ManyToOne關係模型的官方django「投票」教程中複製問題。

回答

1

我有更新django-grappelli解決了類似的問題。如果你沒有使用它,檢查你的軟件包,也許你會發現什麼會影響管理網站的工作。

pip freeze | grep django-將顯示與

版本
+0

任何想法是什麼導致它,因爲我看到同樣的錯誤,但我沒有使用Grappeli。我有一種感覺,這是與基於類的視圖/混合。 –

1

在Django中< = 1.7.3,我需要我的模型的主鍵字段更改爲下拉列表AutoField:

錯誤:

class Answer(models.Model): 
    id = IntegerField(primary_key=True) 

正確:

class Answer(models.Model): 
    id = AutoField(primary_key=True) 

請參閱 https://code.djangoproject.com/ticket/15665

0

將應用程序從Django == 1.4.20遷移到Django == 1.8.3後,我有一個過時的templates_django/admin/edit_inline/stacked.html和templates_django/admin/edit_inline/tabular.html文件。 所以我剛剛刪除它們,現在一切正常。 您也可以將它們升級到當前的django版本而不是刪除。