python关键字eval_在QuerySets中翻译关键字参数时比eval()更好的方法(Python / Django)

我正在使用django-transmeta(无法使用django 1.2.5获得更好的效果),它在表格中创建了多个列:content_en,content_es,content_it

在实施i18n之前,我曾经:

items = Items.objects.filter(categories__slug=slug)现在category.slug是国际化的,因此我有“category.slug_en”,“category.slug_es”,“category.slug_it”等。

所以我虽然在做:

from django.db.models import Q

from django.utils.translation import get_language

current_lang = get_language()

queryset = {

'en': Q(categories__slug_en__contains=slug),

'es': Q(categories__slug_es__contains=slug),

'it': Q(categories__slug_it__contains=slug),

}

items = Items.objects.filter(queryset[current_lang])但是,如果我这样做,每当我需要添加一种新的语言,我将不得不改变代码,当然我不想这样做。

所以我做了:

from django.db.models import Q

from django.utils.translation import get_language

current_lang = get_language()

var = 'Q(categories__slug_%s=slug)' % current_lang

queryset = eval(var)

items = Items.objects.filter(queryset)但在这种情况下,我使用的eval()当然是邪恶()的同义词,并且会更好地避免它。

所以我想知道:有没有更好的方法来做到这一点?

非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值