Python Django循环记录以匹配ID问题,其他选项?

Python Django循环记录以匹配ID问题,其他选项?,python,django,django-models,Python,Django,Django Models,我通过网关发送SMS消息,并获得带有SMS参考ID的回复 12345678-2 我将其存储在数据库中 网关然后调用我的服务器上的URL,其中包含送达回执和它所属文本的ID 12345678 注意区别!因此,我需要将ID与数据库中的ID进行匹配。由于某些原因,此特定网关只发回ID的第一部分,省略了破折号之后的所有内容- 我的第一个想法是在存储之前不带破折号地删除数据库中的ID,但这对我来说不是一个选项,因为需要存储整个内容。其他网关使用此代码,我无法更改此函数 我的第二个选择是通过循环所有记录

我通过网关发送SMS消息,并获得带有SMS参考ID的回复

12345678-2
我将其存储在数据库中

网关然后调用我的服务器上的URL,其中包含送达回执和它所属文本的ID

12345678
注意区别!因此,我需要将ID与数据库中的ID进行匹配。由于某些原因,此特定网关只发回ID的第一部分,省略了破折号之后的所有内容
-

我的第一个想法是在存储之前不带破折号地删除数据库中的ID,但这对我来说不是一个选项,因为需要存储整个内容。其他网关使用此代码,我无法更改此函数

我的第二个选择是通过循环所有记录来匹配下面的ID

class MessageManager(models.Manager):
    def get_matching_message(self, ref_ID):
        for gateway in Gateway.objects.all():
            try:
                return Message.objects.get(
                    gateway_message_id=ref_ID
                )
            except Message.DoesNotExist:
                pass
但我不能强迫自己这么做,它闻起来很难闻

我愿意接受其他想法


谢谢。

如果网关在数据库中存储重复项,则此代码可以帮助您:

class MessageManager(models.Manager):
    def get_matching_messages(self, ref_id):
        try:
            return Message.objects.filter(gateway_message_id__icontains=ref_id)
        except Message.DoesNotExist:
            pass
这将生成一个Queryset,而不仅仅返回一个对象

否则,为
get()
切换
filter()
,并使用
\uuu iexact
返回1个对象,如果存在重复的对象,则抛出
多个对象返回的
异常

class MessageManager(models.Manager):
    def get_matching_messages(self, ref_id):
        try:
            return Message.objects.get(gateway_message_id__iexact=ref_id)
        except (Message.DoesNotExist, Message.MultipleObjectsReturned):
            pass
由于您没有使用来自
网关
迭代的任何内容,因此现在可以跳过此操作,除非此
网关\u消息\u id=ref\u id
应为
网关。消息\u id=ref\u id
(请注意。) 但是如果没有看到你的模特,很难判断


我不相信这有异味,但我知道你是从哪里来的,你面临着一个你无法“修复”的问题,因为其他网关依赖于相同的代码,这使得它,嗯,至少可以说是一个讨厌的问题。

SMS id有可能被复制吗?也就是说,其他网关可以创建相同的id?@limelights可能但不太可能这是一个UUID感谢您花时间回答,这正是我需要的信息。