django - 在 Django 中实例化时预填充非模型表单属性
问题描述
我想在视图中实例化表单时为表单上的 DecimalField 属性设置最小值。我想从我从数据库中收集的对象中获取最小值。我通过手动将 html 表单放入模板中使其(某种程度)工作,但我想重构它以使用表单类,因为我可以在视图中对数据做比在模板中做更多有用的事情。
根据我对其他问题和文档的阅读,我无法使用.initial
参数设置属性。我认为可能我需要覆盖__init__
表单上的方法,但我很确定我没有正确执行此操作,并且在语法上没有任何意义。这是我尝试过的:
class BidForm(forms.Form):
bid = forms.DecimalField(decimal_places=2)
listing_bid = forms.CharField(widget=forms.HiddenInput())
def __init__(self, min_bid, listing_pk, *args, **kwargs):
super(BidForm, self).__init__(*args, **kwargs)
self.fields['bid'].min = min_bid
self.fields['listing_bid'] = listing_pk
我的想法是让这个表单采用 amin_bid
和 a ,并用变量listing_pk
中的任何内容填充 html 输入上的“min”属性。min_bid
我想将listing_pk
传入的值作为一个名为“listing_bid”的隐藏字段中的值。如果它有助于澄清,我正在尝试生成相当于:
<input type="number" name="bid" min="{{ listing.current_bid }}">
<input type="hidden" name="listing_bid" value="{{ listing.pk }}">
在视图中,我想说的是:
form = BidForm(min_bid=foo, listing_bid=bar)
然后将其传递到模板上下文中进行渲染。
这有意义吗?我在 ModelForms 的上下文中找到了一些关于它的讨论,但我无法理解如何使用常规表单来做到这一点。
编辑:供将来参考,这对我有用。我删除了表单上的 bid 属性,因为在不提供以下内容的情况下我不想初始化它min_bid
:
class BidForm(forms.Form):
listing_bid = forms.CharField(widget=forms.HiddenInput())
def __init__(self, min_bid, listing_pk, *args, **kwargs):
super(BidForm, self).__init__(*args, **kwargs)
self.fields['bid'] = forms.DecimalField(decimal_places=2, min_value=min_bid)
self.fields['listing_bid'].initial = listing_pk
解决方案
您可以使用.initial
属性:
class BidForm(forms.Form):
bid = forms.DecimalField(decimal_places=2)
listing_bid = forms.CharField(widget=forms.HiddenInput())
def __init__(self, min_bid, listing_pk, *args, **kwargs):
super(BidForm, self).__init__(*args, **kwargs)
self.fields['bid'].min_value = min_bid
self.fields['listing_bid'].intial = listing_pk
推荐阅读
- javascript - 用替换的变量打印 mathjs 表达式
- java - Apache2 代理错误:从远程服务器读取错误
- node.js - 运行 npm install 时 JSON 输入意外结束
- html - 媒体查询问题:调整大小/移动块
- python - 在分析 csv 文件中的数据(平均值、中位数、众数等)时需要帮助
- powershell - 如果 & 号命令失败,如何自动停止 powershell。示例: & $cmd # 现在它失败了
- sql - 连接失败 - 定义必须采用 SELECT 语句的形式
- r - 分隔逗号分隔值不同行
- c++ - C++17:如何控制执行策略中的线程数?
- javascript - 转换为 django 模板时出现 Javascript 问题