小编dgi*_*rdi的帖子

Django ugettext_lazy,interpolation和ChoiceField

我希望ChoiceField有这些选择:

choices = [(1, '1 thing'),
           (2, '2 things'),
           (3, '3 things'),
           ...]
Run Code Online (Sandbox Code Playgroud)

我希望翻译它.

这不起作用:

choices = [(i, ungettext_lazy('%s thing', '%s things', i) % i) for i in range(1,4)]
Run Code Online (Sandbox Code Playgroud)

因为只要插入了惰性对象,它就会变成一个unicode对象 - 因为在启动时会评估ChoiceField.choices,它的选择将在Django启动期间处于活动状态.

我可以使用ugettext_lazy('%s things' % i),但这需要翻译每个数字,这是愚蠢的.这样做的正确方法是什么?

django internationalization

7
推荐指数
1
解决办法
1305
查看次数

Django-如何在测试过程中更改FileField upload_to路径

我正在使用FileField为Django模型编写测试用例。我想更改上传路径,以防止测试对系统的其余部分产生副作用。

我尝试将可调用对象传递给upload_to并在测试中对其进行修补:

#models.py
upload_path = lambda x, y: 'files'
class Model(models.Model):
    file = models.FileField(upload_to=upload_path)

#tests.py
test_path = mock.Mock()
test_path.return_value = 'files/test'
@mock.patch('models.upload_path', new=test_path)
class ModelTest(object):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,我相信原因是在运行任何测试代码之前FileField取消了upload_path的引用,因此现在修补补丁太晚了。

如何让测试代码更改“ upload_to”是什么?失败了,模型如何检查是否正在通过测试运行?

testing django nosetests python-mock

5
推荐指数
1
解决办法
1165
查看次数