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 forms
from 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}),
}