【问题标题】:Retrieving pk from filtered Django QuerySet从过滤的 Django QuerySet 中检索 pk
【发布时间】:2018-11-07 19:46:43
【问题描述】:

我有一个 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

如何保护书面过滤方法并获得主键值?

提前致谢。

【问题讨论】:

  • 您只需遍历results,对于每个element,您都会获得element.pk 属性。

标签: django django-queryset searchqueryset


【解决方案1】:

与您访问sample_name 字段的方式类似,您还可以访问pk 字段:

在 Python 代码中:

for sample in results:
    print(sample.pk)

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 2018-11-14
    • 2014-07-13
    • 2021-07-04
    • 2013-12-17
    • 2021-06-16
    • 2018-01-05
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多