Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2013 11:30:26

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

Django ошибка с кодировкой

Привет. На просторах форума уже встречена эта ошибка - http://python.su/forum/topic/20535/ но решилась сама собой. У меня же вторые сутки не решается)

Я, кажется все перепробовал. views.py выглядит так:

def home (request):
categories = Category.objects.all()
documents = Document.objects.all()
if request.method == 'POST':
if request.POST['name']:
name_post = request.POST['name']
documents = documents.filter(name__icontains=name_post)
if request.POST['prikaz_name']:
documents = documents.filter(prikaz__in=request.POST['prikaz_name'])

И вот на prikaz_name валится, а на name, все ок. Из чего я делаю вывод, что проблема именно в ManyToMany.

Может кто встречал?
Спасибо.

Офлайн

#2 Дек. 9, 2013 12:08:50

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

Django ошибка с кодировкой

А этот prikaz_name точно есть в request.POST?
Непонятно, что даст Вам эта проверка

if request.POST['prikaz_name']:
если такого ключа нет. Тогда вывалится эксепшен.

И ну
request.POST['prikaz_name']
возвращает ОДНО значение, а prikaz__in ожидает список.



Офлайн

#3 Дек. 9, 2013 12:12:53

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

Django ошибка с кодировкой

Спасибо.

1. Точно есть. Но переделать на if ‘prikaz_name’ in request.POST — вобщем не проблема.
2. Изменил на

documents = documents.filter(prikaz__in=[request.POST['prikaz_name'],])
ошибка та же.(

Офлайн

#4 Дек. 9, 2013 12:24:50

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

Django ошибка с кодировкой

А это нормально что django debug trace мне выдает prikaz_name = u'C\u0430\u043b\u043e\u043d' ?

Офлайн

#5 Дек. 9, 2013 12:41:37

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

Django ошибка с кодировкой

Далее,
и нахрена нужен ин?

documents = documents.filter(prikaz__in=[request.POST['prikaz_name'],])
prikaz_in ожидает список объектов типа Prikaz, вы пихаете ему что?
Вы даете ему нейм, тогда и ищите по нейму
documents = documents.filter(prikaz__name=request.POST['prikaz_name'])
Вообще нормально, когда передается или id или slug



Отредактировано FishHook (Дек. 9, 2013 12:43:31)

Офлайн

#6 Дек. 9, 2013 15:41:35

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

Django ошибка с кодировкой

А, стоит рассказать о models.py:

class Prikaz(models.Model):
        name = models.TextField()
class Document (models.Model):
        name = models.CharField(max_length=255)
        prikaz = models.ManyToManyField(Prikaz, related_name='prikaz_list', blank=True)

А согласно документации django, поиск по ManyToMany производится именно по __in, и это логично.
https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

Article.objects.filter(publications__in=[1,2])

Отредактировано skyfantom (Дек. 9, 2013 15:41:46)

Офлайн

#7 Дек. 9, 2013 15:45:33

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

Django ошибка с кодировкой

Спасибо, разобрался.) Вот дурак, ведь в том же абзаце решение.)

Article.objects.filter(publications__title__startswith="Science").count()
!!!! Article.objects.filter(publications__title__startswith="Science").distinct().count() !!!!
Article.objects.filter(publications__in=[1,2]).distinct()
Article.objects.filter(publications__in=[p1,p2]).distinct()

Соответственно в моем случае:

documents = documents.filter(prikaz__name__icontains=request.POST['prikaz_name'])

Отредактировано skyfantom (Дек. 9, 2013 15:46:42)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version