我是python的新手,从python 3和django1.8开始。我们可以将字典作为参数传递给它吗,但其中要包含多个值,但函数定义中的参数要少一些。
def save_myobj(request):
'''
'''
reqobj = dict(zip(request.POST.keys(), request.POST.values()))
my_dict = prepare_profile_dict(**reqobj)
obj = Model.objects.get(pk=1)
obj.__dict__.update(my_dict)
obj.save()
return HttpResponse("true")
这是我的请求对象:
reqobj = {
u'csrfmiddlewaretoken': u'xzlrzJkpKb0aAIvdJ7Z7aX05uhHjnwjX',
u'email': u'',
u'first_name': u'abc',
u'last_name': u'def',
u'revenue': u''
}
这是 prepare_profile_dict
def prepare_profile_dict(first_name, last_name, email):
''' '''
return {
"revenue" : get_revenue(),
"first_name":first_name,
"last_name":last_name,
"email":email
};
但是出错了
TypeError at /profile/save/
prepare_profile_dict() got an unexpected keyword argument 'revenue'
我认为与Model没有任何关系。
class Model(models.Model):
'''
'''
first_name = models.TextField("first_name", blank=True, null=True, db_index=True)
last_name = models.TextField("last_name", blank=True, null=True, db_index=True)
email = models.TextField("email", blank=True, null=True, db_index=True)
revenue = models.IntegerField()
您prepare_profile_dict
不接受revenue
参数(如错误消息中所述);只是first_name
,last_name
和email
。但是,调用该函数时,您的dict扩展确实包含revenue
关键字。可以将其从中删除reqobj
:
del reqobj['revenue']
或**kwargs
在末尾添加一个参数prepare_profile_dict
以捕获任何其他关键字参数(在函数内部将被忽略)。
def prepare_profile_dict(first_name, last_name, email, **kwargs):
...
(显然,也是如此csrfmiddlewaretoken
。)
update
方法:
def save_myobj(request):
reqobj = dict(zip(request.POST.keys(), request.POST.values()))
my_dict = prepare_profile_dict(**reqobj)
# ensure my_dict only contains relevant keys
Model.objects.get(pk=1).update(**my_dict)
# No .save method needed
return HttpResponse("true")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句