2013-08-06 63 views
0

在我的代碼中,我通過電子郵件向用戶詢問他們是否想通過發送兩個鏈接來確認或拒絕該命令(使布爾值爲false或true)。唯一的問題是,他們可以通過點擊true來繼續更改布爾值,然後返回false true和false等。如果他們點擊了真正的鏈接,他們就不能返回並使其爲false。讓一個布爾在Django中保持真或假

下面是views.py代碼:

def confirm(request, itemnum): 
     item = get_object_or_404(PurchaseOrder, item_number = itemnum) 
     item.confirmed = True 
     item.save() 
     confirm_title = 'Purchase Order %s Confirmed' % item.product 
     send_mail(confirm_title, 'Check the Product Order System to see the updated list.', '[email protected]',['[email protected]'], fail_silently=False) 
     return HttpResponse('Product %s confirmed' % item.product) 

def deny(request, itemnum): 
     item = get_object_or_404 (PurchaseOrder, item_number = itemnum) 
     item.confirmed = False 
     item.save() 
     deny_title = 'Purchase Order %s Denied' % item.product 
     send_mail(deny_title, 'Check the Product Order System to see the updated list.', 'MyEmail.com', ['[email protected]'], fail_silently = False) 
     return HttpResponse('Product %s denied' % item.product) 
+0

你想阻止他們回去,或阻止他們改變布爾?或者你對任何一方都很好? – keyser

+0

我希望通過電子郵件發送鏈接的人員能夠確認或一次性拒絕。在他們做出真假之後,他們不能回頭去改變它。 – Mdjon26

回答

1

彼得的回答另一種方法是有兩個布爾字段,第一個是你處理現在一個,第二個叫HasResponded。然後,當用戶點擊鏈接時,視圖會執行以下操作:

if instance.HasResponded: 
    return render(request, 'already-responded.html',) 
else: 
    instance.HasResponded = True; 
    instance.Bool = response 
    instance.save() 
    return render(request, 'template.html',) 

只是爲了給您一些選擇。

+0

我很抱歉我對Python很陌生。那麼,我會把這個放在我的views.py中,上面的代碼是我說的嗎? Bool會爲我實例化嗎? – Mdjon26

+0

在我寫的代碼中,'instance'是您正在處理的對象的實例。這就是你在上面的代碼中用'item'寫的東西。是的,我寫的'instance.Bool'就是你所說的'item.confirmed'。所以你只需要在你的模型('PurchaseOrder')中添加'HasResponded'或(更合適)'has_responded'字段。在你看來,我給出的樣本應該在你看來。 –

1

我會用NullBooleanField處理這個問題,確認或否認前值初始化爲None,然後檢測非None值在確認和否定的意見和提供您想要嘗試改變狀態的任何迴應。我可能會返回一個頁面,說明「產品%s已被確認」或類似的東西取決於其狀態,但顯然這取決於您的情況。

其他的解決方案當然是可能的 - 一個外鍵的狀態模型可以是一個好主意,如果你預期得到任何更加複雜。