django views - доступ к полю m2m в общем виде - PullRequest
0 голосов
/ 16 февраля 2011

Я наткнулся на эту проблему, и мой мозг новичка разгорелся, пытаясь ее решить.Я чувствую, что здесь есть некоторые основные понятия, которые мне не хватает.

Итак, у меня есть эта модель «Фильмы» с полем выбора категории и отношением m2m к модели «Режиссеры», и я пытаюсь написать 2 разных просмотра, один из которых возвращает список фильмов, отфильтрованных по категориям.и тот, который возвращает список фильмов, отфильтрованных режиссером.Первый из них прост, но я просто не знаю, как получить поле имени модели директора для создания второго фильтра.

Итак, у меня есть эти модели (я вынул ненужные вещи, включая категорию, о которой я упоминал выше)

class Director(models.Model):
    name = models.CharField(max_length=50)
    web = models.URLField(blank=True, help_text= "opcional")


class Film(models.Model):

    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length= 15)
    director = models.ManyToManyField(Director, blank=True, help_text= "opcional")

этот URL

(r'^peliculas/director/(?P<director>\w+)/$', 'filtered_by_director'),

и этоview

def filtered_by_director(request,director):
    return list_detail.object_list(
        request, 
        queryset = Film.objects.filter(director.name=director),
        template_name ='sections/film_list.html',
        template_object_name = 'film',
        paginate_by = 3

        )

Предполагается, что оба представления используют один и тот же шаблон для визуализации соответствующего списка объектов. Представлению не нравится фильтр, который я использую в наборе запросов для поля m2m, но яПонятия не имею, как это сделать на самом деле, я попробовал все, что мог придумать, и это дает мне ошибку «ключевое слово не может быть выражением»

Любая помощь этому скромному новичку будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Строка queryset = Film.objects.filter(director.name=director),

необходимо прочитать: queryset = Film.objects.filter(director__name=director),

Полевой поиск выполняется с помощью __ синтаксиса с двойным подчеркиванием: http://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups

0 голосов
/ 16 февраля 2011

В вашем фильтре попробуйте указать имя директора, например ( документация ):

filter(director__name=director)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...