gpt4 book ai didi

python - Django:根据另一种形式动态更改表单要求

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:37 24 4
gpt4 key购买 nike

我在使用 Django 表单时遇到了一些问题。基本上,我有两种形式,一种是自由术语搜索,其他是一些过滤器。仅当用户未选择任何过滤器时,才需要该术语的字段。我有这样的东西(但在同一类中有更多过滤器):

    class Term(forms.Form):
terms = forms.CharField(
label='Term',
required=True, # but false if the filters is selected
error_messages={'required': 'Please enter at least one search term'},
widget=TextInput(attrs={
'class':'textEntry',
'placeholder': 'Enter search'}))

class Filter(forms.Form):
filter = forms.ModelChoiceField(
choices = [1,2, 3],
label = "Filter",
required = False)

我到处搜索,但没有找到结果。你有什么主意吗?谢谢。

最佳答案

在实例化 Term 表单时,您需要将 filter 传递给它,然后适本地设置 terms 所需的值。我稍微修改了名称,以便更容易区分您的表单类。

# forms.py
class TermForm(forms.Form):
def __init__(self, *args, **kwargs):
filter = kwargs.pop('filter', None)
super(self, TermForm).__init__(*args, **kwargs)
if filter:
self.fields['terms'].error_messages = {
'required': 'Please enter at least one search term'
}
else:
self.fields['terms'].required = False

terms = forms.CharField(
label='Term',
widget=TextInput(attrs={
'class': 'textEntry',
'placeholder': 'Enter search'}))

# views.py, assuming Django 1.4.x+
from django.shortcuts import render
from your_app.forms import TermForm, FilterForm

def a_view(request):
filter_form = FilterForm(request.POST or None)

if request.method == 'POST' and filter_form.is_valid():
term_form = TermForm(request.POST or None,
filter_form.cleaned_data.get('filter')
if term_form.is_valid():
# do something

return render(request, 'a-template.html',
{'filter_form': filter_form, 'term_form': term_form})

所有字段都是自动必需的,除非您专门将它们设置为非必填,这就是为什么 __init__ 覆盖中的逻辑可能看起来是倒退的。如果您需要在选择过滤器时直观地指示该字段是必需的,则需要添加一些 JavaScript 来执行此操作。

关于python - Django:根据另一种形式动态更改表单要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com