在Django中实例化时预填充非模型表单属性

在Django中实例化时预填充非模型表单属性,django,Django,我想在视图中实例化窗体时为窗体上的DecimalField属性设置一个最小值。我想从数据库中收集的对象中得到最小值。我通过手动将html表单放入模板中使其(某种程度上)起作用,但我想重构它以使用form类,因为我可以对视图中的数据做比模板中更有用的事情 根据我对其他问题和文档的阅读,我无法使用.initial参数设置属性。我想我可能需要重写表单上的\uuuu init\uuu方法,但我很确定我做得不对,在语法上没有任何意义。以下是我尝试过的: class BidForm(forms.Form):

我想在视图中实例化窗体时为窗体上的DecimalField属性设置一个最小值。我想从数据库中收集的对象中得到最小值。我通过手动将html表单放入模板中使其(某种程度上)起作用,但我想重构它以使用form类,因为我可以对视图中的数据做比模板中更有用的事情

根据我对其他问题和文档的阅读,我无法使用
.initial
参数设置属性。我想我可能需要重写表单上的
\uuuu init\uuu
方法,但我很确定我做得不对,在语法上没有任何意义。以下是我尝试过的:

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
我的想法是让这个表单采用
min\u bid
listing\u pk
,并用
min\u bid
变量中的任何内容填充html输入的“min”属性。我想把作为值传入的
listing\u pk
放在一个名为“listing\u bid”的隐藏字段中。如果这有助于澄清,我将尝试生成html,相当于:

<input type="number" name="bid" min="{{ listing.current_bid }}">
<input type="hidden" name="listing_bid" value="{{ listing.pk }}">
然后将其传递到模板上下文中进行渲染

这有意义吗?我在ModelForms的上下文中找到了一些关于它的讨论,但我不知道如何使用常规表单来实现这一点

编辑:为了将来的参考,这里是我的作品。我删除了表单上的bid属性,因为在没有提供
minu 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
类投标表格(forms.Form):
投标=表格。十进制字段(小数位=2)
清单_bid=forms.CharField(widget=forms.HiddenInput())
定义初始值(自我、最小出价、清单主键、*args、**kwargs):
超级(BidForm,self)。\uuuuuu初始值(*args,**kwargs)
self.fields['bid'].min\u value=min\u bid

self.fields['listing_bid'].initial=listing_pk
Ah,明白了-这将用listing_pk中的任何内容填充listing_bid,但是bid字段上的属性呢?这个语法会起作用吗?当我在视图中实例化它时,生成的html不包含我要查找的“min”属性。只是:@testingtesting:ah,但是最小值是用
.min\u value
指定的。这实际上不起作用。最后,我将bid字段设置为一个新的DecimalField:
self.fields['bid']=forms.DecimalField(DecimalField=2,min\u value=min\u bid)
然后删除了
\u init\uuuuu
之外的bid变量声明(
bid=forms.DecimalField(DecimalField=2)
)但不管它是否在那里,它都起着同样的作用。
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