Использовать поле столбца внутри Django метода фильтра - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть поле в базе данных, которое приходит в виде строки (x). Мне нужно преобразовать его в формат, который будет использоваться внутри filter() метода. Как это возможно?

Также, когда поле равно none, я хочу использовать что-то для возврата True. Как filter(1=1), чтобы избавиться от ошибки

def DeviceDetailView(request,device_id):
    View_filtering = Applications.objects.values_list('view_filtering').filter(pk=2)
    #x gives data_type=1
    x= View_filtering[0][0]

    #should be DeviceData.objects.filter(data_type=1) but x is a string
    DeviceData.objects.filter(x)

1 Ответ

2 голосов
/ 11 февраля 2020

Учитывая, что значение x является выражением, которое должно использоваться внутри метода фильтра, т.е. x может быть чем-то вроде x = 'device_id=5', тогда вы можете сделать следующее:

x = 'device_id=5'
temp_list = x.split('=')

Теперь, когда вы отделили ключевое слово и значение от выражения, вы можете использовать temp_list внутри метода фильтра следующим образом, распаковывая словарь, созданный на месте:

DeviceData.objects.filter(**{temp_list[0]: temp_list[1]})

Для кейса x равно None или есть другая проблема со значением ключевых слов внутри x, вы можете обработать эти исключения следующим образом (следуя подходу EAFP):

x = 'device_id=5'
try:
    temp_list = x.split('=')
    qs = DeviceData.objects.filter(**{temp_list[0]: temp_list[1]})
except (ValueError, TypeError, AttributeError) as e:
    qs = DeviceData.objects.all()
...