Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:使用URL请求作为模型名称';s场_Python_Django - Fatal编程技术网

Python Django:使用URL请求作为模型名称';s场

Python Django:使用URL请求作为模型名称';s场,python,django,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

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

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

def addMember(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

使用和使用变量名访问属性

在您的情况下,它将是:

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

为什么不使用url映射?对不起,我该怎么做?谢谢,我知道了。但我希望避免这种冗长的映射。既然请求就是函数,为什么要列出所有请求?就我而言,有40多个。此外,我的问题是在运行时确定字段,而不是函数。因为使用
eval
是非常糟糕的做法。是的,我知道这不是你的主要问题,这就是为什么我只发表评论:)
word = Word.objects.get(...)
setattr(word, fieldName, True)