Django字段错误 - 无法将关键字'xxxx'解析为字段

时间:2013-04-19 00:31:40

标签: django post

我正在尝试做一些相当简单的事情。允许用户在searchterm中键入文本字段,然后从下拉框中选择搜索字段。但我似乎得到了上述错误。

模板

<form method='post' action=''>
<input type='text' id='searchterm'>
<select id='searchfield'>
    <option value='username'>Username</option>
    <option value='status'>Status</option>
</select>
</form>

查看

def existing(request):
        if request.method == 'POST':
                searchterm = request.POST['searchterm']
                searchfield = request.POST['searchfield']
                records = User.objects.filter(searchfield=searchterm)
        else:
                records = User.objects.all()
        return render_to_response('gpon_table.html',locals())

模型

class User(models.Model):
    username = models.CharField(max_length=50)
    status = models.CharField(max_length=50)

也许我在视图中做错了。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:5)

我认为问题可能在于您如何要求User.objects搜索数据。由于您尝试将动态关键字传入过滤器,因此可能必须将其作为**kwargs传递,而不是直接作为过滤器参数传递。我怀疑Django正在阅读“searchfield”作为要搜索的文字关键字字段名称而不是读取其值。

此链接可能会更清晰地说明可能的解决方案。 https://stackoverflow.com/a/659419/1011998

以下是如何使用当前代码设置实现动态字段的示例。

与往常一样,清理并限制用户输入,否则恶意用户可能会暴露除用于过滤的敏感数据之外的敏感数据。 (注意:这尚未在本地测试)

searchterm = request.POST.get('searchterm')
searchfield = request.POST.get('searchfield', 'username')

# Better to replace/populate this with form field choices
available_fields = ['username', 'status']

if not searchfield in available_fields:
    searchfield = 'username'

kwargs = {'{0}__{1}'.format(searchfield, 'icontains'): searchterm}
records = User.objects.filter(**kwargs)