Python Django循环记录以匹配ID问题,其他选项?
我通过网关发送SMS消息,并获得带有SMS参考ID的回复Python Django循环记录以匹配ID问题,其他选项?,python,django,django-models,Python,Django,Django Models,我通过网关发送SMS消息,并获得带有SMS参考ID的回复 12345678-2 我将其存储在数据库中 网关然后调用我的服务器上的URL,其中包含送达回执和它所属文本的ID 12345678 注意区别!因此,我需要将ID与数据库中的ID进行匹配。由于某些原因,此特定网关只发回ID的第一部分,省略了破折号之后的所有内容- 我的第一个想法是在存储之前不带破折号地删除数据库中的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感谢您花时间回答,这正是我需要的信息。