我使用下面的代码来更新状态。
current_challenge = UserChallengeSummary.objects.filter(user_challenge_id=user_challenge_id).latest('id')
current_challenge.update(status=str(request.data['status']))
我收到以下错误:
'UserChallengeSummary'对象没有属性'update'
解决此错误: 我找到了解决方案:
current_challenge.status = str(request.data['status'])
current_challenge.save()
还有其他方法可以更新记录吗?
答案 0 :(得分:1)
你的工作解决方案是Django中常用的方式,正如@Compadre已经说过的那样。
但有时(例如,在测试中)能够一次更新多个字段很有用。对于这种情况,我写了简单的帮手:
def update_attrs(instance, **kwargs):
""" Updates model instance attributes and saves the instance
:param instance: any Model instance
:param kwargs: dict with attributes
:return: updated instance, reloaded from database
"""
instance_pk = instance.pk
for key, value in kwargs.items():
if hasattr(instance, key):
setattr(instance, key, value)
else:
raise KeyError("Failed to update non existing attribute {}.{}".format(
instance.__class__.__name__, key
))
instance.save(force_update=True)
return instance.__class__.objects.get(pk=instance_pk)
用法示例:
current_challenge = update_attrs(current_challenge,
status=str(request.data['status']),
other_field=other_value)
# ... etc.
如果你有,你可以从函数中删除instance.save()
(在函数调用后调用它)。
答案 1 :(得分:0)