Django 模型。未定义的变量
Django Models. Undefined variable
有谁知道为什么 itembided__currentbid
被识别为 未定义变量 ?我的模型是:
class AuctionListing(models.Model):
username = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
title = models.CharField(max_length=64)
description = models.CharField(max_length=1000)
startingbid = models.DecimalField(max_digits=6, decimal_places=2)
category = models.CharField(max_length=64, blank=True)
imgurl = models.URLField(max_length=300, blank=True)
status = models.BooleanField(default=True)
class Bid(models.Model):
usernameb = models.ForeignKey(User, on_delete=models.CASCADE, related_name="userb")
auctionitem = models.ForeignKey("AuctionListing", on_delete=models.CASCADE, related_name="itembided")
currentbid = models.DecimalField(max_digits=6, decimal_places=2, default=0)
来自 views.py 的代码问题所在:
...
from .models import User, AuctionListing, Bid
def index(request):
q = AuctionListing.objects.filter(status=True).annotate(max_bid=Coalesce(V(0),Max(itembided__currentbid)))
return render(request, "auctions/index.html", {
"q":q,
})
有什么建议吗?我原来的出价模型没有 AuctionListing 参数的引号,它看起来像这样:
auctionitem = models.ForeignKey(AuctionListing, on_delete=models.CASCADE, related_name="itembided")
但是,在阅读了 Whosebug Undefined variable in django 的讨论后,我尝试将引号添加到 AuctionListing 参数中……遗憾的是,它没有用。
您将字段名称作为 字符串 传递,现在您使用标识符,但没有标识符具有该名称。此外,您可能希望以相反的方式 Coalesce
[Django-doc],并在存在相关 Bid
对象的情况下使用 0
。因此,您可以将其重写为:
from django.db.models import Max, Value as V
from django.db.models.functions import Coalesce
from .models import User, AuctionListing, Bid
def index(request):
q = AuctionListing.objects.filter(status=True).annotate(
max_bid=Coalesce(
Max(<b>'itembided__currentbid'</b>), # ← use a string
<b>V(0)</b> # ← use V(0) as second element
)
)
return render(request, "auctions/index.html", {
"q":q,
})
Max(itembided__currentbid)
缺少引号。应该是Max("itembided__currentbid")
有谁知道为什么 itembided__currentbid
被识别为 未定义变量 ?我的模型是:
class AuctionListing(models.Model):
username = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
title = models.CharField(max_length=64)
description = models.CharField(max_length=1000)
startingbid = models.DecimalField(max_digits=6, decimal_places=2)
category = models.CharField(max_length=64, blank=True)
imgurl = models.URLField(max_length=300, blank=True)
status = models.BooleanField(default=True)
class Bid(models.Model):
usernameb = models.ForeignKey(User, on_delete=models.CASCADE, related_name="userb")
auctionitem = models.ForeignKey("AuctionListing", on_delete=models.CASCADE, related_name="itembided")
currentbid = models.DecimalField(max_digits=6, decimal_places=2, default=0)
来自 views.py 的代码问题所在:
...
from .models import User, AuctionListing, Bid
def index(request):
q = AuctionListing.objects.filter(status=True).annotate(max_bid=Coalesce(V(0),Max(itembided__currentbid)))
return render(request, "auctions/index.html", {
"q":q,
})
有什么建议吗?我原来的出价模型没有 AuctionListing 参数的引号,它看起来像这样:
auctionitem = models.ForeignKey(AuctionListing, on_delete=models.CASCADE, related_name="itembided")
但是,在阅读了 Whosebug Undefined variable in django 的讨论后,我尝试将引号添加到 AuctionListing 参数中……遗憾的是,它没有用。
您将字段名称作为 字符串 传递,现在您使用标识符,但没有标识符具有该名称。此外,您可能希望以相反的方式 Coalesce
[Django-doc],并在存在相关 Bid
对象的情况下使用 0
。因此,您可以将其重写为:
from django.db.models import Max, Value as V
from django.db.models.functions import Coalesce
from .models import User, AuctionListing, Bid
def index(request):
q = AuctionListing.objects.filter(status=True).annotate(
max_bid=Coalesce(
Max(<b>'itembided__currentbid'</b>), # ← use a string
<b>V(0)</b> # ← use V(0) as second element
)
)
return render(request, "auctions/index.html", {
"q":q,
})
Max(itembided__currentbid)
缺少引号。应该是Max("itembided__currentbid")