Объект 'Photo' не является итерируемым ошибка в django

Я создал страницу, когда сотрудники нажимают на кнопку просмотра, она должна перенаправлять их на страницу просмотра, но я получаю эту ошибку 'Photo' object is not iterable, как показано на рисунке ниже. Как мне решить эту ошибку?

Вот как выглядит моя страница с кнопкой просмотра enter image description here

Ошибка объекта "Фото" не является итерируемым enter image description here

views.py

def view(request, pk):

    alldescription = Photo.objects.get(id=pk)

    return render(request, 'view.html', {'alldescription': alldescription})

urls.py

urlpatterns = [

    path('register/', views.register, name='register'),
    path('adminpage/', views.admin, name='adminpage'),
    path('customer/', views.customer, name='customer'),
    path('logistic/', views.logistic, name='logistic'),
    path('forget/', views.forget, name='forget'),
    path('changepassword/', views.changepassword, name='changepassword'),

    path('newblock/', views.newblock, name='newblock'),
    path('quote/', views.quote, name='quote'),
    path('profile/', views.profile, name='profile'),
    path('adminprofile/', views.adminprofile, name='adminprofile'),

    path('', views.login_user, name='login'),
    path('home/', views.home, name='home'),
    path('allstaff/', views.allstaff, name='allstaff'),
    path('updatestaff', views.updatestaff, name='updatestaff'),
    path('delete/<int:id>/', views.delete, name='delete'),
    path('deletephoto/<int:id>/', views.deletephoto, name='deletephoto'),

    path('update/<int:id>/', views.update, name='update'),
    path('logout/', views.logout_view, name='logout'),
    path('register/', views.register_view, name='register'),
    path('edit-register/', views.edit_register_view, name='edit_register'),
    path('edit_profile/', views.edit_profile, name='edit_profile'),
    path('ReceptionUnserviceable/', views.ReceptionUnserviceable, name='ReceptionUnserviceable'),
    path('success', views.success, name='success'),
    path('logisticprofile', views.logisticprofile, name='logisticprofile'),
    path('viewreception/', views.viewreception, name='viewreception'),
    path('view/<str:pk>/', views.view, name='view'),
    path('outgoingLRU/', views.outgoingLRU, name='outgoingLRU'),

]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

viewreception.html

{% extends "logisticbase.html" %}
{% block content %}
<style>
table {
    border-collapse:separate;
    border:solid black 1px;
    border-radius:6px;
    -moz-border-radius:6px;
}

td, th {
    border-left:solid black 1px;
    border-top:solid black 1px;
}

th {
    border-top: none;
}

td:first-child, th:first-child {
     border-left: none;
}


h4{color: #006E33;}

</style>


   <div style="padding-left:16px">
     <br>
       <h4>Reception Unserviceable  </h4>
       <p>To delete, click on the delete button.</p>
 <div class="form-block">

  </tr>
         {% for Photo in alldescription %}
     <div class="col-md-9">
         <div class="row">
             <div class="col-md-5">
                 <div class="card my-2">
                     <img class="image-thumbail" src="/media/{{Photo.image}}"  width="250px">
                     <br>

                     <div class="card-body">
                         <small>Customer Name: {{Photo.customername}}</small>
                         <br>
                         <small>Date and Time: {{Photo.datetime}}</small>
                     </div>
                     <form action="{% url 'view' Photo.id %}" method="post">
                          {% csrf_token %}
                          <button type="submit" class="btn btn-sm btn-info" style="width: 460px">View</button>
                      </form>

                     <br>
                      <form action="{% url 'deletephoto' Photo.id %}" method="post">
                          {% csrf_token %}
                          <button type="submit" class="btn btn-sm btn-danger" style="width: 460px">Delete</button>
                      </form>
                 </div>
             </div>
         </div>
     </div>




{% endfor %}

view.html

{% extends "logisticbase.html" %}
{% block content %}
<style>


</style>


   <div style="padding-left:16px">
     <br>
       <h4>Reception Unserviceable  </h4>
 <div class="form-block">


  </tr>
         {% for Photo in alldescription %}
           <img src="/media/{{Photo.image}}" width="250px">
         {% endfor %}


 </div>
   </div>
{% endblock %}

Вы возвращаете не кверисет, а один экземпляр в представлении (на что указывает метод get), поэтому он не является итерируемым.

def view(request, pk):

    alldescription = Photo.objects.get(id=pk) 

    return render(request, 'view.html', {'alldescription': alldescription})

Поэтому вы не можете выполнять итерации в шаблоне.

Просто используйте

<img src="/media/{{ alldescription.image }}" width="250px">

и вернуть другие циклы в шаблонах viewreception.html и logisticbase.html.

Вы используете

Photo.objects.get(id=pk)

Но get() возвращает вам один элемент. В своем шаблоне вы пытаетесь выполнить итерацию по этому единственному элементу. Это невозможно. Поэтому вы получаете ошибку при рендеринге связанного шаблона.

Вы должны использовать в своем шаблоне, удалив for-loop:

<img src="/media/{{ alldescription.Photo.image }}" width="250px">
Вернуться на верх