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

dly*_*zen 1 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>
Run Code Online (Sandbox Code Playgroud)

视图

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())
Run Code Online (Sandbox Code Playgroud)

楷模

class User(models.Model):
    username = models.CharField(max_length=50)
    status = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

也许我在视图中做错了什么.

任何帮助非常感谢.

Tim*_*Jr. 5

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

此链接可能会更清晰地说明可能的解决方案. /sf/answers/46159361/

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

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

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)
Run Code Online (Sandbox Code Playgroud)