2014-11-21 49 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()