根据变量获取Django模型的一部分

时间:2018-08-31 08:34:23

标签: django python-3.x

我的代码

PriceListItem.objects.get(id=tarif_id).price_eur

在我的settings.py

CURRENCY='eur'

我的问题:

我想根据settings.py中的CURRENCY变量选择其他信息

示例:

  PriceListItem.objects.get(id=tarif_id).price_+settings.CURRENCY

有可能吗?

3 个答案:

答案 0 :(得分:5)

好的。实际上,这与Django无关。您可以通过纯Python来获取实例的属性:

getattr(PriceListItem.objects.get(id=tarif_id), 'price_'+settings.CURRENCY)

请注意,在模型上有一个方法可以接受货币作为参数并返回正确的数据(例如,通过我上面写的那一行),可能是一个更好的主意。

答案 1 :(得分:3)

我认为这应该有效

item = PriceListItem.objects.get(id=tarif_id)
value = getattr(item, price_+settings.CURRENCY)

答案 2 :(得分:1)

如果只对特定于列感兴趣,可以使用.values_list使查询更高效:

my_price = PriceListItem.objects.values_list_(
    'price_{}'.format(settings.CURRENCY),
    flat=True
).get(id=tarif_id)

这只会从数据库中获取特定的列,这可能比(首先)将整个行读取到内存中,然后再丢弃其余所有列要快(一点)。

因此,my_price不是PriceListItem对象,而是为特定price_cur列存储的值。

这将导致查询如下:

SELECT pricelistitem.price_cur
FROM pricelistitem
WHERE id=tarif_id