Как не использовать избыточные форы, когда дело доходит до запроса нескольких таблиц - PullRequest
0 голосов
/ 03 ноября 2011

Итак, у меня есть такие URL-адреса:

url(r'^(?P<loc>\w+)/(?P<ctg>\w+)/$', 'beta.views.queryCtgFromIndex'),

, который, как видно, при обращении, например, к / loc / ctgx / queryCtgFromIndex вызывается и вычисляет что-то на основе таблицы ctgx

На самом деле у меня есть 5 таблиц, которые можно запрашивать, поэтому действительные URL могут быть:

/loc/ctg1/, /loc/ctg2/, ..., /loc/ctg5/

На мой взгляд, я делаю что-то вроде:

if ctg == ctg1: do something, ctg1.objects.all() etc...
if ctg == ctg2: do something, ctg2.objects.all() etc...
...
if ctg == ctg5: do something, ctg5.objects.all() etc...

Код что-то сделать довольно большой, и мой вопрос будет таким: могу ли я каким-то образом переписать свой код, чтобы избавиться от пяти форов и получить чистый код? ... что-то вроде bash, вымышленный пример: $ ctg.objects.all () ...

1 Ответ

3 голосов
/ 03 ноября 2011

фреймворк contenttypes позволяет вам взаимодействовать с моделями общим способом, например,

my_model = contenttypes.objects.get(model='my model name')
my_model.model_class().objects.filter(...whatever you would normally do)

, вы, вероятно, захотите использовать белый список, чтобы убедиться, что только пользователь может 'Таким образом, t взаимодействует, например, с вашей моделью пользователя, например

if model_name not in ['list', 'of', 'allowed', 'models']:
    return HttpResponseForbidden()  #or 404
...