django使用字符串过滤模型以避免重复

cgh8pdjw  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(261)

我试着在我的代码中尽可能少地重复我自己,但是我遇到了一个问题。
我的代码是这样的

from .models import source

def myfunction():
    if  category1 == True:
        types=5
        b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(rowdata1='identifier', state=i)

    elif category2 == True:
        types=3
        b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(rowdata2='identifier', state=i)
    .
    .
    .
    return result

不过,我想这样做:

def myfunction():
    if  category1 == True:
        types=5
        param='rowdata1'

    elif category2 == True:
        types=3
        param='rowdata2'

    b=[None]*types
        for i in range(0, types):
            b[i]=source.objects.all().filter(param='identifier', state=i)
    .
    .
    .
    return result

有没有一种方法可以使用字符串或其他结构作为过滤器值来访问django中的模型?当我尝试我的例子2时,我得到一个字段错误,第一个是有效的。
工作建议:

def myfunction():
    if  category1 == True:
        types=5
        param='rowdata1'

    elif category2 == True:
        types=3
        param='rowdata2'

    b=[None]*types
    for i in range(0, types):
        b[i]=source.objects.all().filter(**{param:'identifier'}, state=i)
    .
    .
    .
    return result
bbmckpt7

bbmckpt71#

使用关键字解包,可以执行以下操作:

.filter(state=i,**{param: 'identifier'})

或者如果你喜欢:

.filter(**{param: 'identifier', 'state': i})

相关问题