2013-04-07 32 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

相關問題