Найти - Пользователи
Полная версия: Django ошибка с кодировкой
Начало » Django » Django ошибка с кодировкой
1
skyfantom
Привет. На просторах форума уже встречена эта ошибка - 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.

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

FishHook
А этот prikaz_name точно есть в request.POST?
Непонятно, что даст Вам эта проверка
if request.POST['prikaz_name']:
если такого ключа нет. Тогда вывалится эксепшен.

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

1. Точно есть. Но переделать на if ‘prikaz_name’ in request.POST — вобщем не проблема.
2. Изменил на
documents = documents.filter(prikaz__in=[request.POST['prikaz_name'],])
ошибка та же.(
skyfantom
А это нормально что django debug trace мне выдает prikaz_name = u'C\u0430\u043b\u043e\u043d' ?
FishHook
Далее,
и нахрена нужен ин?
documents = documents.filter(prikaz__in=[request.POST['prikaz_name'],])
prikaz_in ожидает список объектов типа Prikaz, вы пихаете ему что?
Вы даете ему нейм, тогда и ищите по нейму
documents = documents.filter(prikaz__name=request.POST['prikaz_name'])
Вообще нормально, когда передается или id или slug
skyfantom
А, стоит рассказать о 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
Спасибо, разобрался.) Вот дурак, ведь в том же абзаце решение.)

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'])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB