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")