我必须创建一个实例必须满足两个条件的类:
str
子类,以便可以将其传递给os.listdir()
mailing.conf.StrConfRef('another string')
以下是我尝试的:
class StrConfRef(str):
def __new__(cls, name, within=None):
value = globals()[name]
if within:
value = within.format(value)
self = str.__new__(cls, value)
self.name = name
self.within = within
return self
def deconstruct(self):
return ('{}.{}'.format(__name__, self.__class__.__name__), (self.name,),
{'within': self.within})
第一点是尊重os.listdir(StrConfRef(...))
作品。但是,在迁移中,它仍然被评估为“标准字符串”。我签出了django.db.migrations.autodetector
,注意到当代码执行时,StrConfRef实例到达this line(这是预期的,应该意味着StrConfRef被正确地解构)。在
所以我想知道为什么它在我的迁移中显示为一个字符串,而不是一个邮寄.conf.StrConfRef实例。以及如何满足我的条件。在
PS:如果您想知道我为什么需要这种行为,请签出this question。在
PS2:我运行的是python3.4和Django 1.9.2
不幸的是,具有
deconstruct()
方法的对象没有str
subclasses的优先级。在您可以在这里使用
django.db.migrations.writer.SettingsReference
类,它看起来比str
具有优先权。在我建议您改为创建一个自定义字段子类,它将默认为您的
conf
值。例如,Campaign.prefix_subject
可以是此类的实例:相关问题 更多 >
编程相关推荐