Python 在窗体启动后为django窗体赋值

Python 在窗体启动后为django窗体赋值,python,django,forms,Python,Django,Forms,我有一张表格SOproduct2Form 在这个表单中,我有一个字段priceperunit 它在我的模型中定义如下 priceperunit = MoneyField(max_digits=10, decimal_places=2, default_currency='USD') form = SOproduct2Form(instance = soproduct1) #form.priceperunit = 3 form.priceperunit = soproduct1.produc

我有一张表格SOproduct2Form

在这个表单中,我有一个字段priceperunit

它在我的模型中定义如下

priceperunit =  MoneyField(max_digits=10, decimal_places=2, default_currency='USD') 
form = SOproduct2Form(instance = soproduct1)
#form.priceperunit = 3
form.priceperunit = soproduct1.product.defaultPrice
#setattr(form, priceperunite, 5)
在初始化表单后,我尝试将其指定为默认值。 因为表单是对象而不是字典,所以我是这样做的

priceperunit =  MoneyField(max_digits=10, decimal_places=2, default_currency='USD') 
form = SOproduct2Form(instance = soproduct1)
#form.priceperunit = 3
form.priceperunit = soproduct1.product.defaultPrice
#setattr(form, priceperunite, 5)
我没有收到任何错误,在输出时它总是显示0

我尝试直接赋值,但得到的是相同的0。(参见注释行) 当使用setattr(也有注释)时,我得到一个错误,即没有定义priceperunit


问题:问题是什么以及如何使其工作?

在表单启动后,您真的需要分配值吗?根据您的问题描述,在我看来,您只需要设置字段中输入的初始值

通常在标准Django字段中,您会使用
initial
参数,但我检查了
Django money
的源代码,似乎您需要
default
default\u currency
参数。试着这样做:


priceperunit=MoneyField(默认值=value,默认值=currency)

表单启动后是否确实需要分配值?根据您的问题描述,在我看来,您只需要设置字段中输入的初始值

通常在标准Django字段中,您会使用
initial
参数,但我检查了
Django money
的源代码,似乎您需要
default
default\u currency
参数。试着这样做:


priceperunit=MoneyField(默认值=value,默认值\u currency=currency)

为什么要在初始化后执行此操作?为什么不在
initial
dict中传递它,或者通过修改实例来传递它呢?是的,这是一个很好的主意,而且它实际上是有效的:)soproduct1.priceperunit=soproduct1.product.defaultPrice form=SOproduct2Form(instance=soproduct1)为什么要在初始化后执行此操作?为什么不在
初始版本中传递它,或者通过修改实例来传递它呢?是的,这是一个很好的主意,而且它实际上是有效的:)soproduct1.priceperunit=soproduct1.product.defaultPrice form=SOproduct2Form(instance=soproduct1)是的,如您和Daniel所提到的,在启动之前这样做是个好主意。我动态地分配默认值,因为每个产品都有默认价格。是的,在启动之前这样做是个好主意,正如您和Daniel提到的。我动态分配默认值,因为每个产品都有默认价格