2014-01-10 60 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版本而不是删除。