提前感謝您的幫助。當用戶訪問“myCart”頁面時,我試圖檢查購物車物件是否存在。如果沒有,那么它應該創建一個新實體并使用用戶的 id 作為反向查找的外鍵。所以我在 if 陳述句中使用了 exists() 方法。奇怪的是,它沒有執行 else 塊,而是向我拋出一個錯誤,告訴我該物件不存在。測驗用戶還沒有關聯的購物車物件,這很明顯。我不明白的是為什么它沒有觸發我的 else 陳述句。也許我編碼時間太長了,需要休息一下,這就是我錯過它的原因。無論如何,如果你們能幫我看看,我將不勝感激。:)
錯誤:奇怪的錯誤
#此應用程式的 views.py 檔案:
def myCart(request):
context = {}
if request.user.is_authenticated:
owner = request.user.id
if Cart.objects.get(cart_owner=owner).exists():
context['cart'] = cart
return render(request, 'cart/myCart.html', context)
else:
cart = Cart(cart_owner=owner)
context['cart'] = cart
return render(request, 'cart/myCart.html', context)
else:
return HttpResponseRedirect(reverse("login"))
def update_cart(request):
if request.user.is_authenticated:
owner = request.user.id
cart = Cart.objects.get(cart_owner=owner)
productID = request.GET['id']
product = Product.objects.get(pk=productID)
if not product in cart.products.all():
cart.products.add(product)
else:
cart.products.remove(product)
new_total = 0.00
for item in cart.products.all():
new_total = float(item.priceNotax)
cart.total = new_total
cart.save()
return HttpResponseRedirect(reverse("myCart"))
else:
return HttpResponseRedirect(reverse("login"))
推車型號:
class Cart(models.Model):
cart_owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
products = models.ManyToManyField(Product, null=True, blank=True)
total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
timestamp = models.DateTimeField(auto_now_add=False, auto_now=True)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
def __unicode__(self):
return "Cart id: %s" %(self.id)
uj5u.com熱心網友回復:
通過使用.get(…),您可以檢索Cart,如果成功完成,.exists()將無法作業,因為模型物件沒有.exists()物件。
您可以使用.get_or_create(…)[Django-doc]來檢索或創建一個Cart物件,以防此類物件不Cart存在:
from django.contrib.auth.decorators import login_required
@login_required
def myCart(request):
context = {}
context['cart'], __ = Cart.objects.get_or_create(cart_owner=request.user)
return render(request, 'cart/myCart.html', context)
注意:通常最好使用
settings.AUTH_USER_MODEL[Django-doc]來參考用戶模型,而不是直接使用User模型 [Django-doc]。有關更多資訊,您可以查看檔案的參考User模型部分。
注意:您可以使用
@login_required裝飾器 [Django-doc]將視圖限制為經過身份驗證的用戶的視圖 。
uj5u.com熱心網友回復:
.get()如果未找到正好 1 個物件,則會拋出錯誤。相反,將其替換為.filter()然后您可以檢查.exists()
因此,更改Cart.objects.get(cart_owner=owner).exists()為Cart.objects.filter(cart_owner=owner).exists()
或者,您可以使用從技術上講更快的 try-except 塊:
try:
thepost = Content.objects.get(name="test")
except Content.DoesNotExist:
thepost = None
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395931.html
上一篇:如何解決此命令中的問題
