MultipleObjects在使用get_or_create时返回

时间:2014-08-22 23:35:30

标签: python django

我有这个简洁的代码来为当前用户获取或创建对话:

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']
    )

我知道如何修复第一个更干净的版本吗?

1 个答案:

答案 0 :(得分:-1)

抚养和抚养没有任何问题。捕捉异常! 这是另一个选择

try:
    result = Model.objects.get(...)
except Model.DoesNotExist:
    result = Model.objects.create(...)