Skip to main content
 首页 » 编程设计

python之使用 get_or_create 时返回 MultipleObjects

2025年05月04日6itcoder

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

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(...)