Не удается получить доступ к полям моей модели в представлениях, используя /<int:pk>/ в урлах

У меня есть модель Primary и я хочу получить доступ к полям модели внутри моего шаблона viewStudent, потому что у меня больше полей в модели.

модель:

class Primary(models.Model):
    profilePicture = models.ImageField(blank=False, null=False)
    firstName = models.CharField(max_length=25, blank=False, null=False) 
    sureName = models.CharField(max_length=25, blank=False, null=False) 
    lastName = models.CharField(max_length=25, blank=False, null=False)  
    address = models.CharField(max_length=50, blank=False, null=False)
    classOf = models.CharField(max_length=20, blank=False, null=False)
    yearOfGraduations = models.CharField(max_length=20, blank=False, null=False)
    hobbies = models.TextField(blank=False, null=False)
    dateOfBirth = models.CharField(max_length=20)
    year = models.ForeignKey(Album, on_delete=models.CASCADE)

когда я ввожу это внутри моего шаблона: viewAlbum, он выдает мне ошибку, подобную этой: NoReverseMatch at /viewAlbum Reverse for 'view-Student' with arguments '('',)' not found. 1 pattern(s) tried: ['view/(?P[0-9]+)/\Z']

<a href="{% url 'view-Student' primaries.id %}">view Students</a>

urls.py

path('viewAlbum', views.viewAlbum, name='view-Album'),
path('view/<int:pk>/', views.viewStudent, name='view-Student'),

мнения:

def viewAlbum(request):
    primaries = Primary.objects.all()

    return render(request, 'viewAlbum.html', {'primaries': primaries})

def viewStudent(request, pk):
    post = get_object_or_404(Primary, id=pk)

    primaries = Primary.objects.get(id=pk)
    return render(request, 'viewStudent.html', {'post': post, 'primaries': primaries})

внутри моего шаблона viewAlbum я пробовал следующее:

<a href="{% url 'view-Student' primaries.pk %}">view Students</a>

шаблон viewAlbum:

 <div class="container">
    <div class="row justify-content-center">
        {% for prima in primaries %}
        <div class="col">
            <div class="card my-2" style="width: 18rem;">
                <img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">

                <div class="card-body">
                    <p>{{ prima.firstName }}</p>
                    <br>
                    <a href="{% url 'view-Student' prima.pk %}">view Students</a>
                </div>
            </div>
            
        </div>
    </div>
    {% endfor %}
</div>

шаблон viewStudents:

    <div class="container">
    <div class="row justify-content-center">
        <div class="card">
            <div class="card-body">
                <div class="row justify-content-center">
                    <img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">
                    <p>{{ prima.firstName }}</p>
                </div>
            </div>
        </div>
    </div>
</div>

но это не работает

как я могу решить эту проблему?

По вашему мнению,

def viewAlbum(request):
    primaries = Primary.objects.all()  # RETURNS ALL 

    return render(request, 'viewAlbum.html', {'primaries': primaries})

primaries не имеет pk, так как является кверисетом.

Возможно, вы имеете в виду перебор ВСЕХ первичных объектов, что-то вроде этого?

{% for p in primaries %}
    <a href="{% url 'view-Student' p.pk %}">view Student</a>

{% endfor %}

Edit
. Имя, которое вы передаете через представление, должно совпадать с тем, которое вы используете в шаблоне. Так как вы используете имя prima в шаблоне, то именно его вы должны передать в представлении:

def viewStudent(request, pk):
    post = get_object_or_404(Primary, id=pk)

    prima = Primary.objects.get(id=pk)
    return render(request, 'viewStudent.html', {'post': post, 'prima': prima})
Вернуться на верх