Получение pk из отфильтрованного Django QuerySet - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть модель 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 голосов
/ 08 ноября 2018

Аналогично тому, как вы получаете доступ к полю sample_name, есть также поле pk, к которому вы можете получить доступ:

В коде Python:

for sample in results:
    print(sample.pk)

Или в коде вашего шаблона:

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

Обратите внимание, что фактическое имя столбца базы данных pk может отличаться (обычно это id), но Django всегда делает доступным ярлык pk.

...