2014-11-21 56 views
0

我试图将django-concurrency project添加到django 1.6.8 webapp的管理界面。该应用程序处理存储关于我们称为“配置”的对象的数据。我们希望避免因这些配置的并发编辑而导致的问题。Django并发属性错误

到目前为止,我已经做到最好遵循documentation与管理界面集成,但我得到一个讨厌的AttributeError的:

Internal Server Error: /test/common/configuration/ 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 137, in get_response 
    response = response.render() 
    File "/usr/local/lib/python2.7/dist-packages/django/template/response.py", line 105, in render 
    self.content = self.rendered_content 
    File "/usr/local/lib/python2.7/dist-packages/django/template/response.py", line 82, in rendered_content 
    content = template.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 140, in render 
    return self._render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/test/utils.py", line 85, in instrumented_test_render 
    return self.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render 
    return compiled_parent._render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/test/utils.py", line 85, in instrumented_test_render 
    return self.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render 
    return compiled_parent._render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/test/utils.py", line 85, in instrumented_test_render 
    return self.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render 
    return compiled_parent._render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/test/utils.py", line 85, in instrumented_test_render 
    return self.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render 
    result = block.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render 
    result = block.nodelist.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 840, in render 
    bit = self.render_node(node, context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 78, in render_node 
    return node.render(context) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 1196, in render 
    _dict = func(*resolved_args, **resolved_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templatetags/admin_list.py", line 288, in result_list 
    'results': list(results(cl))} 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templatetags/admin_list.py", line 266, in results 
    yield ResultList(None, items_for_result(cl, res, None)) 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templatetags/admin_list.py", line 258, in __init__ 
    super(ResultList, self).__init__(*items) 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templatetags/admin_list.py", line 185, in items_for_result 
    f, attr, value = lookup_field(field_name, result, cl.model_admin) 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 254, in lookup_field 
    value = attr(obj) 
    File "/usr/local/lib/python2.7/dist-packages/concurrency/admin.py", line 37, in action_checkbox 
    get_revision_of_object(obj)))) 
    File "/usr/local/lib/python2.7/dist-packages/concurrency/api.py", line 23, in get_revision_of_object 
    return getattr(obj, get_version_fieldname(obj)) 
    File "/usr/local/lib/python2.7/dist-packages/concurrency/core.py", line 22, in get_version_fieldname 
    return obj._concurrencymeta._field.attname 
AttributeError: 'Configuration' object has no attribute '_concurrencymeta' 
[21/Nov/2014 20:29:51] "GET /test/common/configuration/ HTTP/1.1" 500 368613 

到目前为止,我已经改变了ConfigurationAdmin类如here所述继承ConcurrentModelAdmin。

class ConfigurationAdmin(ConcurrentModelAdmin): 

    form = forms.ConfigurationForm 
    change_list_template = 'admin/configuration/change_list.html' 

    ... 

我也delete_selected_confirmation.html改变{{ obj.pk }}{{ obj|identity }}为定向在documentation

有谁知道如何解决这个问题?如果需要,我可以提供更多来自其他文件的代码。

回答

0

解决方案是我忘了给模型添加一个版本字段。

from concurrency.fields import AutoIncVersionField 
class Configuration(models.Model): 

    version = AutoIncVersionField()