我在做這將從查詢集來顯示對象列表的通用模板:在Django中基於捕獲的URL參數過濾QuerySet?
{% for o in objects %}
{{ o.name }}
{% endfor %}
我希望能夠使用在多個場合,模板,其中不同類型的過濾和排序需要做完了。我創建了一個視圖功能是:
def display_objects(request, filters, orders, template_name):
objects = Object.objects.all()
for filter in filters:
objects = objects.filter(('%s__%s' % (filter['field'], filter['relationship']), filter['value']))
for order in orders:
objects = objects.order_by('-' if 'descending' in order else '' + order['field'])
# render objects to template with context
pass
我不知道如果我做了什麼至今仍然工作,但我碰到的一個問題。我不知道用當前函數過濾URL中捕獲的參數設置的查詢是否可行。
例如,如果我想顯示與特定的用戶我會做一些這樣的對象:
(r'^user/(?P<account_username>[^/]+)/$', display_objects, dict(filters=[{'field':'account__username','relationship':'iexact','value':account_username}], orders=[{'field':'foobar'}], template_name='user.html'))
顯然,account_username是不是一個定義的字段,直到URL被解析並分發到display_objects功能。製作一個帶有account_username參數的視圖函數會很容易,但我希望能夠使用該函數來顯示其他對象查詢集,這些查詢集將用不同的捕獲參數進行過濾。
是否有某種方法可以將捕獲的URL參數傳遞給視圖函數來動態地過濾或排序查詢集以顯示?
正如我想到的那樣,我意識到,我構建視圖函數的方式可能不是最優的。對於如何動態過濾併爲模板排序查詢集,您有任何建議嗎? – mburke13 2012-04-09 22:52:45