Django表单域upd

2024-10-04 11:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django表单,允许用户从多个标记选项中选择一个标记。我面临的问题是,即使标记列表得到更新,模型表单也不会从数据库中获取更新的标记列表。因此,新标记不会出现在选项中。你知道吗

这是我的密码表单.py地址:

class EnglishTagForm(forms.Form):
    tag_choices = [(x.tagName, x.tagName.upper()) for x in ClassTag.objects.filter(
                     agentId=Agent.objects.get(name='English Chowdhury'))]
    tag = forms.CharField(widget=forms.Select(choices=tag_choices, 
                     attrs={'class':'form-control'}))

def __init__(self, *args, **kwargs):
    super(EnglishTagForm, self).__init__(*args, **kwargs)
    self.fields['tag'].choices = [(x.tagName, 
                           x.tagName.upper()) for x in ClassTag.objects.filter(
                           agentId=Agent.objects.get(name='English Chowdhury'))]

此窗体正在视图中实例化。我的问题是我应该做什么样的更改,以便在每次实例化时从数据库更新tag\u选项。你知道吗

以上表格在英语中的用法视图.py地址:

````

def complaintDetail(request, complaint_id):

    complaint = Complaints.objects.filter(pk=complaint_id).first()
    context = {}

    if request.method == 'POST':
        agent = Agent.objects.get(name="English Chowdhury")

        if "SubmitTag" in request.POST:
            englishForm = EnglishTagForm(request.POST)

            if englishForm.is_valid:
                // Complaint Delete Logic
                return redirect('chatbot:modComplaints')
            else:
                englishForm = EnglishTagForm()
                context['eForm'] = englishForm
        elif "SubmitBundle" in request.POST:
            newTagForm = NewTagForm(request.POST)

            if newTagForm.is_valid():
               // Complaint Delete Logic

                complaint.delete()
                return redirect('chatbot:modComplaints')
            else:
               newTagForm = NewTagForm()
               context['newForm'] = newTagForm
    else:
        englishForm = EnglishTagForm()
        context['eForm'] = englishForm
        newTagForm = NewTagForm()
        context['newForm'] = newTagForm
    context['complaint'] = complaint
    return render(request, 'chatbot/complaintDetail.html', context) 

````

编辑:(供将来参考) 我决定修改tag属性并将CharField转换为ModelChoiceField,这似乎解决了问题。你知道吗

更新类:

class EnglishTagForm(forms.Form):
    tag = forms.ModelChoiceField(queryset=ClassTag.objects.filter(
        agentId=Agent.objects.get(name='English Chowdhury')), 
        empty_label=None, widget=forms.Select(
        attrs={'class':'form-control'}))

Tags: in标记objectsrequesttagcontextformspost