ModelForm中增加字段以及初始化的方法
ModelForm中需要增加字段
步骤:
在内中定义一个名为problem_status 的字段:
problem_status = fid.IntegerField( label="问题状态",
widget=wid.Select(attrs={"class": "form-control"}, choices=PROBLEM_STATUS),
initial=0
)
在Meta的fields列表中,增加刚刚定义的字段:
fields = ["content", "problem_status"]
假如需要静态初始化该字段的值,定义的时候设置initial参数即可
假如涉及动态初始化该字段的值,有2个地方可以改:
1.form的init的方法
在form的init方法中,设置self.initial[‘字段名’]:
假如要动态设定choices内容,也在init方法里设定即可
self.initial["problem_status"] = ...
ps:form的instance字段可以拿到modelform对应的model实例
2.view中进行初始化:
我的view是继承CreateView,UpdateView
在get_context_data方法中,可以对form进行设置:
context["form"].fields["problem_status"].initial = ...
这样就可以了
其他view,可以去找一下form实例所在的位置,然后设置对应的filed的initial字段即可。
from django import formsfrom django.forms import widgets as wid # 因为重名,所以起个别名
from django.forms import fields as fid
# 问题状态
PROBLEM_STATUS = (
(0, "未解决"),
(1, "已解决"),
)
class ProblemProgressForm(forms.ModelForm):
problem_status = fid.IntegerField(
label="问题状态",
widget=wid.Select(attrs={"class": "form-control"}, choices=PROBLEM_STATUS),
initial=0
)
def __init__(self, *args, **kwargs):
super(InspectionProblemProgressForm, self).__init__(*args, **kwargs)
if self.instance.problem:
self.initial["problem_status"] = self.instance.problem.status
class Meta:
model = InspectionProblemProgress
fields = ["content", "problem_status"]
widgets = {
"content": wid.Textarea(attrs={"cols": 30, "rows": 6}),
}
以上是 ModelForm中增加字段以及初始化的方法 的全部内容, 来源链接: utcz.com/z/515781.html