【发布时间】:2015-04-01 19:03:00
【问题描述】:
我正在尝试迭代表单结果,我不禁认为我在这里重新发明了轮子。
filterlist = []
if request.POST:
form = FilterForm(request.POST)
if form.is_valid():
for key, value in form.cleaned_data.iteritems():
filterlist.append(key)
filterlist.append(value)
这可行,但看起来很尴尬,并产生了许多其他问题。例如,值与 u' 一起返回,所以我必须使用 value.encode("utf8") 但如果值为 None 它会引发错误。所以现在我必须检查它是否为无,如果不是则编码。一定有更好的方法。
编辑:我想要做什么。
我正在尝试过滤页面上显示的内容。我遇到的问题是,如果一个值为空(用户不填写该框,因为他们只想过滤一个对象),那么我不会得到任何结果。例如,用户想要按作者姓名“Smith”搜索所有书籍,但不想搜索流派。
results = Books.objects.filter(author=author, genre=genre)
用户不会得到任何结果,因为这是一个 AND 搜索。但是,如果用户为作者输入“Smith”,为流派输入“mystery”,那么它的工作原理与我想要的完全一样,只会给出两者都正确的结果。
所以,我试图通过迭代表单结果来消除空的东西。就像我说的那样,我可能在这里重新发明轮子。
【问题讨论】:
-
为什么必须将其转换回“普通”字符串?
-
更好的方法来做什么?您还没有解释为什么要这样做,或者您如何以重要的 Unicode 方式使用输出。
-
你到底想做什么?看起来您的
filterlist是一个键列表,后跟值。 -
我编辑了我的帖子以提供更多背景信息。
-
您是否尝试过使用 django.db.models 中的 Q 以及将 modelForm 中的必填字段设置为 False 以使其工作
class myForm(forms.ModelForm): myField = forms.CharField(required=False) class Meta: model = myModel