gpt4 book ai didi

python - 如何更新 django 中的模型对象?

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:43 25 4
gpt4 key购买 nike

我正在使用下面的代码来更新状态。

current_challenge = UserChallengeSummary.objects.filter(user_challenge_id=user_challenge_id).latest('id')
current_challenge.update(status=str(request.data['status']))

我收到以下错误:

'UserChallengeSummary' object has no attribute 'update'

要解决此错误:我找到了解决方案:

current_challenge.status = str(request.data['status'])
current_challenge.save()

还有其他方法可以更新记录吗?

最佳答案

您的工作解决方案是 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() (在函数调用后显式调用它)。

关于python - 如何更新 django 中的模型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38894573/

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