【发布时间】:2010-06-15 15:01:38
【问题描述】:
今天我遇到了一个奇怪的问题:
我在 Django 中有一个模型类,并为其添加了一个自定义属性,该属性不应保存到数据库中,因此在模型结构中不具有代表性:
class Category(models.Model):
groups = models.ManyToManyField(Group)
title = defaultdict()
现在,当我在 shell 中或编写测试时,我会执行以下操作:
c1 = Category.objects.create()
c1.title['de'] = 'german title'
print c1.title['de'] # prints "german title"
c2 = Category.objects.create()
print c2.title['de'] # prints "german title" <-- WTF?
似乎“标题”是一种全球性的。如果我将标题更改为一个简单的字符串,它会按预期工作,所以它必须对字典做些什么?我还尝试将标题设置为属性:
title = property(_title)
但这也不起作用。那么,我该如何解决呢?提前谢谢!
编辑:
以下是基础问题的目的,即根据要求为您提供更好的整个周围环境的视图: 在我们的模型结构中,我们有一个存储翻译的模型类。这个类与所有其他相互有关系的类没有约束力。翻译类存储翻译值、语言键、翻译键以及翻译所属的包和类。一些模型类可以具有可以翻译成不同语言的属性。这些属性没有映射到 Django 模型结构中,因为这在我们看来是不可能的。这些具有可翻译属性的类中的每一个(我们称它们为可翻译的)都可以具有这些属性中的一个或多个。这就是翻译密钥的用途。例如。如果有一个具有可翻译属性“title”的类 Category,模型翻译会将“module.somewhere.Category”存储为包/类,“title”作为翻译键,例如对于德语,翻译值“Kategorie”和语言键“de”。 我的目标是简化对这些属性的访问。所以所有这些模型类都继承自一个名为“Translatable”的普通类。它有一个用于解析模块路径和类名称的方法(用于稍后存储在翻译数据库表中)和一个采用属性名称的“_propertize”方法。属性实例化一个类“翻译器”,该类对于每个可翻译属性名称都是唯一的。这个类从翻译模型类中解析真正的翻译值,并自动解析当前选择的语言的翻译。
【问题讨论】:
标签: python django class django-models