如何解决十进制字段形式的变量min_value
我正在尝试设置字段的表单变量的最小值。
class BidForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['bid'] = forms.DecimalField(min_value=50,error_messages={'min_value': 'Price must be greater than the current price'})
self.fields['bid'].widget.attrs.update({'placeholder': 'Place your bid here','step': 1})
在这种情况下,我已经将50值编码了,但是我需要根据当前出价进行设置。
这是“出价”,“用户”和“拍卖”模型:
class User(AbstractUser):
pass
class Auction(models.Model):
title = models.CharField(max_length=64)
description = models.TextField()
base_price = models.DecimalField(max_digits=5,decimal_places=2)
image = models.CharField(max_length=120,blank=True)
category = models.ForeignKey(Category,default=2,on_delete=models.CASCADE)
user = models.ForeignKey(User,related_name="auctions",on_delete=models.CASCADE)
is_active = models.BooleanField(default=True)
slug = models.SlugField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse("detail",args=[self.slug])
class Bid(models.Model):
bid = models.DecimalField(max_digits=5,decimal_places=2)
user = models.ForeignKey(User,related_name="bid",on_delete=models.CASCADE)
auction = models.ForeignKey(Auction,on_delete=models.CASCADE)
def __str__(self):
return f'Bid for ${self.bid} on {self.auction} by {self.user}'
这是视图:
def detail(request,auction):
auction = get_object_or_404(Auction,slug=auction)
comments = auction.comments.all()
current_bid = auction.bid.last()
comment_message = None
bid_message = None
new_comment = None
new_bid = None
if request.method == 'POST':
comment_form = CommentForm(data=request.POST)
bid_form = BidForm(data=request.POST)
if request.POST.get("form_type") == 'form_comment':
bid_form = BidForm()
if not request.user.is_authenticated:
comment_message = "You have to sign in to post a comment"
else:
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.auction = auction
new_comment.user = request.user
new_comment.save()
return redirect('detail',auction.slug)
elif request.POST.get("form_type") == 'form_bid':
comment_form = CommentForm()
if not request.user.is_authenticated:
bid_message = "You have to sign in to place a bid"
else:
if bid_form.is_valid():
new_bid = bid_form.save(commit=False)
new_bid.auction = auction
new_bid.user = request.user
print(bid_form)
new_bid.save()
return redirect('detail',auction.slug)
else:
comment_form = CommentForm()
bid_form = BidForm()
context = {'auction': auction,'comments': comments,'comment_form': comment_form,'bid_form': bid_form,'new_comment': new_comment,'new_bid': new_bid,'current_bid': current_bid,'comment_message': comment_message,'bid_message': bid_message
}
return render(request,'auctions/detail.html',context)
表格中的模板:
<form action="" method="post" novalidate>
{% csrf_token %}
<input type="hidden" name="form_type" value="form_bid">
<div class="msg">
<div class="input-group">
{{bid_form.bid}}
{% comment %}
<input type="number" id="id_bid" name="bid"
min="{{current_bid.bid|add:1}}">
{% endcomment %}
{% if bid_form.bid.errors %}
{{bid_form.bid.errors}}
{% endif %}
</div>
</div>
<div class="input-group send-reset">
<input type="submit" value="Place Bid"/>
</div>
</form>
{{bid_form.bid}}
呈现为
<input type="number" name="bid" min="50" step="1" placeholder="Place your bid here" required>
但我需要将其渲染为
<input type="number" id="id_bid" name="bid" min="{{current_bid.bid|add:1}}">
最后一个在客户端运行,但是我无法在服务器端实现它。 任何帮助,将不胜感激!! 预先感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。