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

}

 

 

 

以上是 ModelForm中增加字段以及初始化的方法 的全部内容, 来源链接: utcz.com/z/515781.html

回到顶部