首页 > 解决方案 > 如何在视图中动态更新 Django Form min_value?

问题描述

我正在尝试创建一个拍卖网站,用户可以在其中对物品出价。我在模型中存储最低出价,并在加载视图时检索该值。我想使用 min_value 来防止用户出价低于min_bid.

我没有收到任何错误,只是 min_value 不起作用。

我的表单类:

class place_bid(forms.Form):
    bid_amount = forms.IntegerField(label="Bid Amount")
    def __init__(self, min_value, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['bid_amount'].min_value = 1

加载表单的视图(此时我还没有写出我实际处理用户提交的部分,只是想先得到正确的验证)

def listings(request, listing_id):
    listing = Listing.objects.get(id=listing_id)
    if request.method == "POST":
        min_bid = listing.min_bid
        return render(request, "auctions/listings.html", {
            "listing": listing,
            "bids": listing.bids.all(),
            "form": place_bid(min_value={"bid_amount":5})
        })
    if request.method == "GET":
        return render(request, "auctions/listings.html", {
            "listing": listing,
            "bids": listing.bids.all(),
            "form": place_bid(min_value={"bid_amount":5})
        })

的HTML:

    <form action="/listings/{{listing.id}}" method="post">
        {% csrf_token %}
        {{ form }}
        <button class="btn btn-primary" type="submit">Place Bid</button>
    </form>

我已经测试了删除所有的def __init__东西并更改bid_amount = forms.IntegerField(label="Bid Amount")为 `bid_amount = forms.IntegerField(label="Bid Amount", min_value=5) 并且有效,但我需要能够动态更新它。我假设我对这种语法做错了。有人可以让我知道我需要改变什么吗?非常感谢!

编辑:这是我的出价模型:

class Bid(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name="bids", blank=True)
    bid_amount = models.DecimalField(max_digits=10, decimal_places=2, null=True)
    bid_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name="bids", null=True)
    bid_time = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    def __str__(self):
        return f"The last bid on {self.listing} was {self.bid_amount}. Placed by {self.bid_by}"

标签: pythondjangoforms

解决方案


推荐阅读