在查询多个表时如何不使用冗余fors

时间:2011-11-03 13:40:09

标签: django for-loop views models

所以我有这样的网址:

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

可以看出,在访问时,例如,/ loc / ctgx /调用queryCtgFromIndex并根据ctgx表计算某些内容

我实际上有5个表可以查询,所以有效网址可以是:

/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...

做某事代码是非常大的,我的问题是:我能以某种方式重写我的代码以摆脱五个fors并拥有干净的代码吗? ......像bash这样的东西,虚构的例子:$ ctg.objects.all()......

1 个答案:

答案 0 :(得分:3)

contenttypes框架允许您以通用方式与模型交互,例如

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

您可能希望使用白名单来确保只有用户无法与您进行互动。这样的用户模型,例如

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