从已过滤的Django QuerySet中检索pk

时间:2018-11-07 19:46:44

标签: django django-queryset searchqueryset

我有一个Sample模型,该模型通过Web界面进行搜索,并且按预期返回了条件匹配的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}) 

我还想出于其他目的返回模型的主键。

我在下面尝试了变体。

      results = Sample.objects.filter(sample_name__icontains=search_term).get(sample_name_id=pk)      

但是出现类似以下错误: name 'pk' is not defined

如何保护所写的过滤方法并获得主键值?

先谢谢了。

1 个答案:

答案 0 :(得分:0)

类似于您访问sample_name字段的方式,还有一个pk字段可以访问:

在Python代码中:

for sample in results:
    print(sample.pk)

或者,在您的模板代码中:

{% for result in results %}
    {{ result.pk }}
{% endfor %}

请注意,pk的实际数据库列名称可能有所不同(通常为id),但是Django始终使pk快捷方式可用。