从过滤后的 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 快捷方式。