我有这个简洁的代码来为当前用户获取或创建对话:
c, created = Conversation.objects.get_or_create(
message__sender=request.user,
content_type=get_content_type(request.POST['ct']),
object_id=request.POST['oid'],
defaults={'subject': request.POST['subject']}
)
问题在于这一行message__sender=request.user
;当有多条消息时,我收到MultipleObjectsReturned
例外。
我已经找到了这个丑陋的解决方案,让它按照我的意愿运作:
try:
c = Conversation.objects.filter(
message__sender=request.user,
content_type=get_content_type(request.POST['ct']),
object_id=request.POST['oid']
)[0]
except IndexError:
c = Conversation.objects.create(
subject=request.POST['subject'],
content_type=get_content_type(request.POST['ct']),
object_id=request.POST['oid']
)
我知道如何修复第一个更干净的版本吗?
答案 0 :(得分:-1)
抚养和抚养没有任何问题。捕捉异常! 这是另一个选择
try:
result = Model.objects.get(...)
except Model.DoesNotExist:
result = Model.objects.create(...)