更改视图中的初始表单字段值(Django)
Change initial form field value in views (Django)
我有三个表单字段,我想在我的视图中 modify/change 值 - 函数 one_labeling() 在 post 模板中的表单之前。第一个字段是标签,我想在视图中更改初始值。其次,我有两个选择字段,pos_tag 和 head_tags,我在 MultiplechoiceFields post_tags 和 head_tags 的视图中使用 set_head_tags 和 set_post_tags 在表单中为了 post 每个选定字段的值而不是数字,例如 "NN" 而不是 1。目前我从 pos_tag 获得键 1 的值 "NN" s 在表单中,但我想知道是否可以在视图中为字段 pos_tags 和 head_tags 设置和修改初始变量,就像字段标签一样。
in forms.py
class LabelingForm(forms.ModelForm):
label = forms.CharField(widget=forms.HiddenInput(), initial="trytrytry22",required=False)
POS_nodes = (('1','NN'),
('2','POSS'),
....
)
pos_tags = forms.MultipleChoiceField(choices=POS_nodes, required=False)
Head_node_choices = (('1','NP'),
('2','VP'),
...
)
head_tags = forms.MultipleChoiceField(choices=Head_node_choices,required=False)
class Meta:
model = OneLabeling
fields = ('label', 'sentence' )
def set_head_tags(self, head_tags):
data = self.data.copy()
data['head_tags'] = head_tags
self.data = data
def set_pos_tags(self, pos_tags):
data = self.data.copy()
data['pos_tags'] = pos_tags
self.data = data
在views.py
def one_labeling(request, postID):
form = LabelingForm(request.POST)
data1 = form.cleaned_data['pos_tags']
data2 = form.cleaned_data['head_tags']
if form.is_valid():
if data1 and data2:
l = data1[0]
ll = data2[0]
pos_tags = dict(form.fields['pos_tags'].choices)
head_tags = dict(form.fields['head_tags'].choices)
i = pos_tags.get(l)
j = head_tags.get(ll)
form.set_head_tags(j)
form.set_pos_tags(i)
post_one_labeling(request, one_labeling)
要为多选字段提供初始值,您可以尝试执行以下操作:-
pos_tags = forms.MultipleChoiceField(choices=POS_nodes,
initial=[POS_node[0] for POS_node in POS_nodes])
我有三个表单字段,我想在我的视图中 modify/change 值 - 函数 one_labeling() 在 post 模板中的表单之前。第一个字段是标签,我想在视图中更改初始值。其次,我有两个选择字段,pos_tag 和 head_tags,我在 MultiplechoiceFields post_tags 和 head_tags 的视图中使用 set_head_tags 和 set_post_tags 在表单中为了 post 每个选定字段的值而不是数字,例如 "NN" 而不是 1。目前我从 pos_tag 获得键 1 的值 "NN" s 在表单中,但我想知道是否可以在视图中为字段 pos_tags 和 head_tags 设置和修改初始变量,就像字段标签一样。
in forms.py
class LabelingForm(forms.ModelForm):
label = forms.CharField(widget=forms.HiddenInput(), initial="trytrytry22",required=False)
POS_nodes = (('1','NN'),
('2','POSS'),
....
)
pos_tags = forms.MultipleChoiceField(choices=POS_nodes, required=False)
Head_node_choices = (('1','NP'),
('2','VP'),
...
)
head_tags = forms.MultipleChoiceField(choices=Head_node_choices,required=False)
class Meta:
model = OneLabeling
fields = ('label', 'sentence' )
def set_head_tags(self, head_tags):
data = self.data.copy()
data['head_tags'] = head_tags
self.data = data
def set_pos_tags(self, pos_tags):
data = self.data.copy()
data['pos_tags'] = pos_tags
self.data = data
在views.py
def one_labeling(request, postID):
form = LabelingForm(request.POST)
data1 = form.cleaned_data['pos_tags']
data2 = form.cleaned_data['head_tags']
if form.is_valid():
if data1 and data2:
l = data1[0]
ll = data2[0]
pos_tags = dict(form.fields['pos_tags'].choices)
head_tags = dict(form.fields['head_tags'].choices)
i = pos_tags.get(l)
j = head_tags.get(ll)
form.set_head_tags(j)
form.set_pos_tags(i)
post_one_labeling(request, one_labeling)
要为多选字段提供初始值,您可以尝试执行以下操作:-
pos_tags = forms.MultipleChoiceField(choices=POS_nodes,
initial=[POS_node[0] for POS_node in POS_nodes])