我试图使用django-datatrans在模型上翻译MarkupField
(从django-markitup)。两个应用程序都可以独立工作,但是当我注册datatrans来翻译MarkupField
时,我就不能再在管理中添加对象了。
相关代码:
from django.db import models
from markitup.fields import MarkupField
from datatrans.utils import register
class Work(models.Model):
title = models.CharField(max_length=500)
content = MarkupField(help_text=MARKDOWN_HELP)
class WorkTranslation(object):
fields = ('title', 'content')
register(Work, WorkTranslation)
当我尝试在管理中添加新的工作对象时,会出现以下错误:
'unicode' object has no attribute 'raw'
错误发生在此处,在markitup模块中(在
rendered = render_func(value.raw)
行中:.../lib/python2.7/site-packages/markitup/fields.py in pre_save
def pre_save(self, model_instance, add):
value = super(MarkupField, self).pre_save(model_instance, add)
rendered = render_func(value.raw)
setattr(model_instance, _rendered_field_name(self.attname), rendered)
return value.raw
失败时的本地变量:
add: False
model_instance: <Work: This is the title>
value: u'This is the content.'
self: <markitup.fields.MarkupField: content>
当
value
类未注册进行转换时,我尝试检查变量Work
。在这种情况下(然后它可以正常工作),它不是unicode字符串,而是markitup.fields.Markup
的实例。我还没有弄清楚为什么类型会改变,我意识到这个问题非常具体。但我还是希望有人有见地。。
最佳答案
在测试时与django-modeltranslation和django markitup有相同的问题:
class ModelTests(TestCase):
def test_my_class(self):
self.assertRaises(IntegrityError, models.MyClass.objects.create)
它适用于我:
class ModelTests(TestCase):
def test_my_class(self):
with self.assertRaises(IntegrityError):
models.MyClass.objects.create(info='', info_de='')
我安装的语言是
en
和de
。我的默认语言是en
。info
是我的领域,有markitup和translation。(我在这里测试MyClass
上需要一个字段,因此IntegrityError
)(顺便说一下,这会产生一个稍微不同的错误:
class ModelTests(TestCase):
def test_my_class(self):
self.assertRaises(IntegrityError, models.MyClass.objects.create(info=''))
错误:
AttributeError: 'NoneType' object has no attribute 'raw'
)
也许这对某人有帮助。
关于python - 一起使用django-datatrans和django-markitup时发生AttributeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8835869/