在我的代码中,我通过向用户发送电子邮件询问他们是否要通过向他们发送两个链接来确认或拒绝订单(使bool为false或为true)。唯一的问题是,他们可以通过单击true然后单击false true然后false等来不断更改bool。我希望如果他们单击真正的链接,他们就不能返回并使其成为假。
这是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.', 'MyEmail@gmail.com',['YourEmail@gmail.com'], 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', ['YourEmail@gmail.com'], fail_silently = False)
return HttpResponse('Product %s denied' % item.product)
答案 0 :(得分:1)
我会使用NullBooleanField
处理此问题,在确认或拒绝之前将值初始化为None
,然后在确认和拒绝视图中检测非None
值,并提供您的任何回复想要试图改变状态。我可能会返回一个页面,上面写着“产品%s已经被确认”之类的东西,具体取决于它的状态,但显然这取决于你的情况。
其他解决方案当然是可行的 - 如果您预计会变得更复杂,那么Status模型的外键可能是一个好主意。
答案 1 :(得分:1)
Peter的答案的替代方法是有两个布尔字段,第一个是您现在正在处理的字段,第二个字段是HasResponded
。然后,当用户单击该链接时,该视图将执行以下操作:
if instance.HasResponded:
return render(request, 'already-responded.html',)
else:
instance.HasResponded = True;
instance.Bool = response
instance.save()
return render(request, 'template.html',)
只是给你一些选择。