[英]Looping over a specific field in a django form
通过创建类似 eBay 的投标应用程序来学习 Django。
我的一个模型是简单的出价 class,它将记录每个用户对特定列表的出价。
模型.py
class Bid(models.Model):
bid = models.DecimalField(max_digits=10, decimal_places=2)
user = models.ForeignKey(User, on_delete=models.CASCADE)
listing = models.ForeignKey(Listing, on_delete=models.CASCADE)
forms.py
def listing_view(request, id):
form = BidForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.listing_id = id
# check bid is higher than starting bid or other bids or flash error message
current_bid = instance.bid
starting_bid = instance.listing.starting_bid
query = Bid.objects.all().filter(listing=id)
在 forms.py 中,我正在编写一个视图来验证用户输入的出价是否大于现有出价。 它不完整,因为我坚持创建这个比较。
简单的方法是遍历“查询”变量并进行比较,但有更优雅的解决方案吗?
我找到了一个使用 all() function 的解决方案,类似于:
all(current_bid > i in my_list)
但这仅适用于与列表进行比较,不适用于表单对象
有没有办法循环查询(即查询中的每个)并检查 current_bid 是否大于 1 行中的所有“each.bid”?
像这样的东西:
all(current_bid > i for i.bid in query)
可悲的是,这不起作用。 我得到一个 NameError - name 'i' 没有定义。
谢谢!
这一行在这里:
all(current_bid > i for i.bid in query)
需要改成这样:
all(current_bid > i.bid for i in query)
有时列表推导令人困惑,所以我喜欢把它们想象成正常的 for 循环。 这是我对您尝试做的事情的解释(不保证正确性):
is_biggest_bid = True
for i in query:. # writing i.bid wouldn't make sense here
if i.bid > current_bid:
is_biggest_bid = False
break
希望有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.