Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2010 22:25:08

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Такой код

    
context_name = _(u"муму")
kwargs={}
...
kwargs['onetoone__fk2__name__icontains']=context_name
...
print '..'
q = Table.objects.select_related('onetoone__fk2__name').filter(**kwargs)
print '....'
Если словарь пустой, то запрос проходит и во вьюхе отображается q.onetoone.fk2.name
Если в словарь попадают численные параметры для запроса, то запрос тоже выполняется правильно все поля отображаются правильно.
Если в словарь добавляется только вышеприведенная конструкция( kwargs=context_name), то запрос сваливается на строке q = Table.objects.select_related('onetoone__fk2__name').filter(**kwargs)
, без сообщений об ошибках.
Всё в utf-8, но если вместо муму поставить латинский символ или цифру без _(u'') то тоже не работает
функция _(u'') это ugettext.

В чем может быть проблема?



Отредактировано (Фев. 14, 2010 22:32:14)

Офлайн

#2 Фев. 14, 2010 22:49:09

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Nick2009
то запрос сваливается на строке q = Table.objects.select_related('onetoone__fk2__name').filter(**kwargs)
, без сообщений об ошибках.
Что значит “сваливается”?
Nick2009
select_related('onetoone__fk2__name')
Вы понимаете что этот вызов не имеет смысла?



Офлайн

#3 Фев. 14, 2010 22:59:51

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Daevaorn
Nick2009
то запрос сваливается на строке q = Table.objects.select_related('onetoone__fk2__name').filter(**kwargs)
, без сообщений об ошибках.
Что значит “сваливается”?
Nick2009
select_related('onetoone__fk2__name')
Вы понимаете что этот вызов не имеет смысла?
Сваливается, значит выполнение вьюхи прекращается в этой строке

Почему не имеет? Этот вызов без вышеприведенного аргумента работает и возвращает выборку с name из таблицы перевода для объекта на который ссылается внешний ключ, который в свою очередь находися в связаной таблице по ключу один к одному с таблицей, к которой делается запрос.
Мне нужно теперь получить выборку отфильтрованную по заданному контексту к name.

Что в этом вызове не имеет смысла?

Вас наверное смущают onetoone и fk2 , так это для понятности :)

Конкретно, нужно получить примерно такой SQL
SELECT * FROM item_process AS p
LEFT JOIN item AS i ON i.id = p.id
LEFT JOIN obj AS o ON o.id = i.obj_id
LEFT JOIN obj_taranslation AS o_trans ON o_trans.master = o.id
WHERE o_trans.name_ru LIKE '%некоторый контекст%'



Отредактировано (Фев. 14, 2010 23:53:35)

Офлайн

#4 Фев. 14, 2010 23:30:23

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Nick2009
Сваливается, значит выполнение вьюхи прекращается в этой строке
Тогда покажите трейсбек ошибки.
Nick2009
Почему не имеет?
select_related предназначен для “присоединения” связных объектов целиком. Из-за этого имеет смысл указыва только related поля – т.е. ForeignKey/OneToOneField. Поля другого типа указывать бессмысленно.

Ну и конечно, если вам не нужны связные объекты в результате, то вообще select_related надо опустить. В вашем случае это скорей всего так.



Офлайн

#5 Фев. 14, 2010 23:37:09

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Daevaorn
Nick2009
Сваливается, значит выполнение вьюхи прекращается в этой строке
Тогда покажите трейсбек ошибки.
Nick2009
Почему не имеет?
select_related предназначен для “присоединения” связных объектов целиком. Из-за этого имеет смысл указыва только related поля – т.е. ForeignKey/OneToOneField. Поля другого типа указывать бессмысленно.

Ну и конечно, если вам не нужны связные объекты в результате, то вообще select_related надо опустить. В вашем случае это скорей всего так.
Согласен, исправил, но это никак на результат не влияет.

Я там желаемый SQL привел.
Ошибка в другом.



Отредактировано (Фев. 14, 2010 23:38:45)

Офлайн

#6 Фев. 14, 2010 23:52:11

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Nick2009
Ошибка в другом.
Ну так трейсбек вы приведете? Тут телепатов нет.



Офлайн

#7 Фев. 14, 2010 23:54:30

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

filter __contains валит запрос

А как его получить? в консоли ошибок нет, в браузере нет.



Офлайн

#8 Фев. 15, 2010 00:00:54

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Nick2009
в консоли ошибок нет, в браузере нет.
А что есть в браузере и в консоле? Если происходит ошибка, то должен быть трейсбек.



Офлайн

#9 Фев. 15, 2010 00:29:27

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

filter __contains валит запрос

В браузере сайт работает. При попытке получить выборку Ajax запросом, сайт ничего не делает, т.к. не получает реквеста.
В консоли идет трэйсбек обращений к серверу и мои принты.
Доходит нормально до этой строки и сваливается из данной вьюхи без комментариев.
Дальше идут опять POST/GET трэйсбеки, т.к. я мышкой двигаю а сайт на это реагирует.
Вообще, есть такая беда, при работе с Ajax запросами в браузер не выдаются ошибки, хотя они очевидно возникают.

Сейчас попробовал Django_debug_toolbar поставить. С первого раза не завелся, нужно его допиливать т.к. он кажется jQuery не видит, а времени сейчас нет.

Может можно получить скрытый стрейсбек из командной строки?



Отредактировано (Фев. 15, 2010 00:37:31)

Офлайн

#10 Фев. 15, 2010 00:34:42

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

filter __contains валит запрос

Воспользуйтесь pdb или logging.exception.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version