我正在尝试在Django中创建一个逻辑,以检查User是否已提供某些信息。如果不是,则创建新对象并保存在数据库中。信息已经存在,然后使用新信息更新同一对象。我犯了一个错误,因为它能够创建一个新对象但无法更新它。
try: # Check if user already have data available
data_created_or_not = UserUsageInfo.objects.get(user_id=request.user.id).data_available_or_not
except Exception: # If not available than, make it false
data_created_or_not = False
if not data_created_or_not: # If its False then create new object
UserUsageInfo.objects.create(user=request.user,
space_used=used_space,
space_allocated=allocated_space,
folders_list=folders,
files_list=files,
files_hash_list=files_hash,
data_available_or_not=True
)
else: # If already there then update it
UserUsageInfo.objects.update(user=request.user,
space_used=used_space,
space_allocated=allocated_space,
folders_list=folders,
files_list=files,
files_hash_list=files_hash,
data_available_or_not=True
)
您可以QuerySet.update_or_create
为此使用:
UserUsageInfo.objects.update_or_create(user_id=request.user.id,
data_available_or_not=True,
defaults={
'user': request.user,
'space_used': used_space,
'space_allocated': allocated_space,
'folders_list': folders,
'files_list': files,
'files_hash_list': files_hash,
})
因此,这里我们将user_id=request.user.id
用作过滤器data_available_or_not=True
。在存在的情况下,我们有更新defaults
,否则,我们创建一个新的对象user_id=request.user.id
,data_available_or_not=True
和所有默认设置。
给定您使用的数据库引擎支持此操作,这可以导致单个查询。如果没有,Django可以模拟它(当然,它将花费多个查询)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句