django динамические объекты Q в общем виде - PullRequest
1 голос
/ 06 февраля 2010

Я хочу иметь возможность передать переменную, захваченную в URL-адресе, объекту Q для общего представления.

Я создал общий вид, который импортируется как my_views.view, который обрабатывает такие вещи, как нумерация страниц, сортировка, фильтрация и т.д ...

Мне нужно использовать объекты Q, потому что для некоторых страниц понадобятся фильтры ИЛИ. Каждая страница также будет фильтроваться на основе различных полей (и моделей) (отсюда и общий вид).

Пример:

view_customers_info = {
    "queryset" : Customer.all(),
    'qobject': Q(status=stat),
    "extra_context" : {
        "title" : 'View Customers',
    },
    'template_name': 'customer/view.html',
}
urlpatterns = patterns('',
  url(r'^customer/(?P<stat>\w+)/$', my_views.view, view_customers_info),
)

В этом примере эта строка жалуется на то, что stat не является глобальным именем:

'qobject': Q(status=stat),

Как передать переменную, попавшую в URL, в словарь view_customers_info?

Я не могу просто переместить этот объект Q в общий вид, потому что другие страницы будут иметь объекты Q, подобные следующему:

'qobject': (Q(type=type) | Q(status=stat)),

Спасибо.

Ответы [ 2 ]

4 голосов
/ 06 февраля 2010

Я думаю, что вы можете сделать это только, обернув общий вид пользовательским представлением / функцией. Смотрите также здесь:

http://docs.djangoproject.com/en/1.1/topics/generic-views/#complex-filtering-with-wrapper-functions

0 голосов
/ 06 февраля 2010

Я думаю, что вы просто пропустили кавычки вокруг названия поля.

    'qobject': Q(status=("%s" % stat)),
...