我有这个简洁的代码来为当前用户获取或创建对话:
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']
)
知道如何修复第一个更干净的版本吗?
请您参考如下方法:
引发和捕获异常没有错! 这是另一种选择
try:
result = Model.objects.get(...)
except Model.DoesNotExist:
result = Model.objects.create(...)
