Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2015 16:09:10

and_07
Зарегистрирован: 2013-06-08
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

и так суть

class Test(model):
    name = text()
    def _test_field(self):
        return md5(self.name + str(self.id))
    test_field = properti(_test_field)
Test.objects.filter(test_field = 'werwer76234fsdfsdf')

код образный для обозначения проблемы

Отредактировано and_07 (Авг. 14, 2015 16:16:58)

Офлайн

#2 Авг. 14, 2015 16:35:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

Методами ОРМ? Никак, разумеется! Как вы себе представляете SQL-запрос, который должна была бы сгенерировать ОРМ?



Офлайн

#3 Авг. 14, 2015 16:41:10

and_07
Зарегистрирован: 2013-06-08
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

ну как то так

select * from test
where md5(concat(id,name)) = 'werwer76234fsdfsdf'


сделал через
Test.objects.raw

просто думал есть что то встроенное

Отредактировано and_07 (Авг. 14, 2015 17:05:32)

Офлайн

#4 Авг. 14, 2015 16:49:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

and_07
просто думал есть что то встроенное
Ок, а если я нахерачу такую функцию?
class Test(model):
    name = text()
    def _test_field(self):
        res = md5(self.name + str(self.id))
        return res + "@{}@".format(res)
    test_field = properti(_test_field)
Test.objects.filter(test_field = 'werwer76234fsdfsdf')



Офлайн

#5 Авг. 14, 2015 16:54:44

and_07
Зарегистрирован: 2013-06-08
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

ну я без понятия зачем вам это

я к тому что если в данном случае

Test.objects.raw
кашерно то ОК

Отредактировано and_07 (Авг. 14, 2015 16:55:44)

Офлайн

#6 Авг. 16, 2015 18:36:10

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

Приспрошусь тут, а вообще в Django можно как-то кастомные СУБД-шные функции вызывать? Кроме встроенных Avg, Max и Sum. Та же md5 из примера.



Офлайн

#7 Авг. 16, 2015 18:47:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Django 1.8 как сделать фильтр по вычисляемому полю

plusplus
А почему нет то? Код джанги открыт, берите пример (Avg, Max и Sum) и делайте по примеру свою функцию.
Прикол ОРМ в том, что она гарантирует работоспособность одного и того же кода, для разных СУБД. Не уверен, что во всех поддерживаемых джангой СУБД есть функция md5. Я бы в задаче топикстартера не стал бы изобретать велосипед и отфильтровал бы питоном. Хотя, наверняка сама постановка задачи неоптимальна и можно обойтись безо всяких таких странных хешей. В любом случае, если нужен некий уникальный функционал и на кроссплатформенность плевать, ну сделай ты хранимку, делов то.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version