Django:使用URL请求作为模型字段的名称

时间:2014-10-23 01:24:32

标签: python django

我曾经使用URL请求作为要执行的函数的名称。例如,假设请求为http://localhost:8000/rango/addMember/,则要执行的函数为addMember。可以通过以下方式实现:

def rango(request, funcName):
    ...
    eval(funcName)(request)
    ...
    return render(request, some.html, someContext)

def addMember(request):
    ...

也就是说,调用函数是在运行时确定的,以避免以下尴尬的安排(假设有几十个函数):

if funcName=='addMember':
    addMember(request)
elif funcName=='deleteMember':
    deleteMember(request)
...

我想知道在运行时是否有类似的方法来确定模型的字段,如下所示:

class Word(models.Model):
    name = CharField()
    adv = BooleanField()
    adj = BooleanField()
    noun = BooleanField()
    ...

def rango(request, fieldName):
    word = Word.objects.get(...)
    word.eval(fieldName) = True
    ...

Django会抱怨声明word.eval(fieldName)没有eval这样的属性。

1 个答案:

答案 0 :(得分:1)

使用getattrsetattr使用变量名称访问属性。

在你的情况下,它将是:

word = Word.objects.get(...)
setattr(word, fieldName, True)