2013-04-07 30 views
0

我通过网关发送短信,并通过SMS的参考ID获得回复。Django循环记录以匹配ID问题,其他选项?

12345678-2 

我将此存储在我的数据库中。

的网关,然后我有送达回执,它属于文字的ID服务器上调用一个网址...

12345678 

注意到其中的差别!所以这里是我需要将ID与我的数据库中的ID相匹配的问题。出于某种原因,这种特殊的网关只发回ID破折号后省略一切的第一部分-

我最初的想法是刚刚剥离在数据库中的ID,而无需存储前仪表板,但这不是的选择我需要存储整个事情。其他网关使用此代码我无法更改此功能。

我的第二个选择是通过循环ALL记录匹配下面的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 

但我不能让自己做到这一点,它味道不好

我接受其他想法?

谢谢。

+1

是否可以重复SMS ID? IE浏览器。其他网关可以创建相同的ID? – 2013-04-07 08:26:40

+0

@limelights可能,但不可能这是一个UUID – MarkO 2013-04-07 08:43:59

回答

1

如果网关专卖店在数据库中的重复那么这段代码可以帮助你:

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,而不是只返回1对象。

否则切换filter()get()和使用__iexact将返回1个对象,并抛出一个异常MultipleObjectsReturned如果有重复。

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 

既然你不使用任何来自gateway迭代这个现在可以除非gateway_message_id=ref_ID跳过应该是gateway.message_id=ref_ID(注意)。 但很难说没有看到您的模型。

我不认为这有味道,但我看到你来自哪里,你面临的问题是你无法“修复”,因为其他网关取决于相同的代码,并使得它,嗯,一个滋扰至少可以说。

+0

感谢您花时间回答,只是我需要的那种信息。 – MarkO 2013-04-07 08:48:00

+0

非常欢迎你,先生! – 2013-04-07 08:50:18

相关问题