从过滤后的 Django QuerySet 中检索 pk
Retrieving pk from filtered Django QuerySet
我有一个通过 Web 界面搜索的 Sample
模型,并且按预期 return 编辑了符合条件的 Sample 对象的 QuerySet。
型号
class Sample(models.Model):
sample_name = models.CharField('Sample', max_length=16)
html形式
<form name="sample_search_form" method="GET" action="{% url 'search' %}">
<input id="sample_search_box" type="text" name="sample_search_box" placeholder="Search samples..." >
<button id="sample_search_submit" type="submit" >Submit</button>
</form>
观看次数
def search(request):
if request.GET:
search_term = request.GET['sample_search_box']
results = Sample.objects.filter(sample_name__icontains=search_term)
return render_to_response('samples/sample_search_list.html', {'results': results})
return render_to_response('samples/sample_search_list.html', {'results': results, 'search': results})
我还想 return 模型的主键用于其他目的。
我尝试了以下变体。
results = Sample.objects.filter(sample_name__icontains=search_term).get(sample_name_id=pk)
但我收到类似于以下内容的错误:
name 'pk' is not defined
怎样才能保证写的过滤方法同时得到主键值呢?
提前致谢。
与您访问 sample_name
字段的方式类似,还有一个 pk
字段您可以访问:
在Python代码中:
for sample in results:
print(sample.pk)
或者,在您的模板代码中:
{% for result in results %}
{{ result.pk }}
{% endfor %}
请注意,pk
的实际数据库列名可能不同(通常为 id
),但 Django 始终提供 pk
快捷方式。
我有一个通过 Web 界面搜索的 Sample
模型,并且按预期 return 编辑了符合条件的 Sample 对象的 QuerySet。
型号
class Sample(models.Model):
sample_name = models.CharField('Sample', max_length=16)
html形式
<form name="sample_search_form" method="GET" action="{% url 'search' %}">
<input id="sample_search_box" type="text" name="sample_search_box" placeholder="Search samples..." >
<button id="sample_search_submit" type="submit" >Submit</button>
</form>
观看次数
def search(request):
if request.GET:
search_term = request.GET['sample_search_box']
results = Sample.objects.filter(sample_name__icontains=search_term)
return render_to_response('samples/sample_search_list.html', {'results': results})
return render_to_response('samples/sample_search_list.html', {'results': results, 'search': results})
我还想 return 模型的主键用于其他目的。
我尝试了以下变体。
results = Sample.objects.filter(sample_name__icontains=search_term).get(sample_name_id=pk)
但我收到类似于以下内容的错误:
name 'pk' is not defined
怎样才能保证写的过滤方法同时得到主键值呢?
提前致谢。
与您访问 sample_name
字段的方式类似,还有一个 pk
字段您可以访问:
在Python代码中:
for sample in results:
print(sample.pk)
或者,在您的模板代码中:
{% for result in results %}
{{ result.pk }}
{% endfor %}
请注意,pk
的实际数据库列名可能不同(通常为 id
),但 Django 始终提供 pk
快捷方式。