gpt4 book ai didi

python字典作为字典中具有多个值的参数

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:28 27 4
gpt4 key购买 nike

我是 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'

我认为这与模型无关。

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_namelast_nameemail。但是,调用该函数时您的字典扩展确实包含 revenue 关键字。从 reqobj 中删除它:

del reqobj['revenue']

或者在 prepare_profile_dict 的末尾添加一个 **kwargs 参数来捕获任何额外的关键字参数(在函数内部将被忽略)。

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")

关于python字典作为字典中具有多个值的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30388022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com