Почему мой generi c .DetailView не заполняет мой подробный шаблон правильным объектом? - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в Django и создаю простой проект, в котором пользователь может войти в систему, просмотреть свою страницу, свои контакты и списки контактов.

У меня есть страница под названием AddressBook , где отображаются списки контактов и контакты пользователя, со ссылками на каждую страницу сведений о контактах. Каждая ссылка создается правильно, но на полученной странице с подробностями отображается только контакт, имеющий pk=1.

РЕДАКТИРОВАТЬ После удаления контакта в БД через админку с pk = 1 теперь я получаю ошибку 404 "No contact found matching the query". Почему мое подробное представление запрашивает неправильный pk?

Мой views.py:

class ContactDetailView(generic.DetailView):
    model = Contact
    context_object_name = 'my_contact'
    pk_url_kwargs = 'contactpk'


def AddressBookView(request, pk):
    if request.user.is_authenticated:
        active_user = request.user
    else:
        #login or something
        error = 'You Shouldn\'t be here!'
    active_user_contact_lists = active_user.contactlist_set.all()
    active_user_contact_lists_contacts = {}

    #Check if we have contact lists - if not pass an empty message or something
    for contact_list in active_user_contact_lists:
        contacts = contact_list.contact_set.all()
        if contacts:
            active_user_contact_lists_contacts[contact_list.listname] = contacts
        else:
            active_user_contact_lists_contacts[contact_list.listname] = []


    else:
        error = 'You don\'t have any contact lists!'

    context = {
        'active_user_contact_lists' : active_user_contact_lists,
        'active_user_contact_lists_contacts' : active_user_contact_lists_contacts,
    }

    return render(request, 'contacts/addressbook.html', context = context)

Мой urls.py:

#In customuser/urls.py
urlpatterns = [
    path('<int:pk>', views.CustomUserDetailView.as_view(), name = 'customuser-detail'),
    path('<int:pk>/mycontacts/', include('contacts.urls')),
]

#In contacts/urls.py
urlpatterns = [
    path('<int:contactpk>', views.ContactDetailView.as_view(), name = 'contact-detail'),
    path('', views.AddressBookView, name = 'AddressBook'),
    path('addcontactlist/', views.AddContactList, name = 'AddContactList'),
    path('addcontact/', views.AddContact, name = 'AddContact'),
    ]

Мой AddressBook.html шаблон:

<!---contacts/templates/contacts/addressbook.html--->
<!DOCTYPE html>
<html>
<head>
    <title>{{user.username}}'s AddressBook</title>
</head>

<body>
    <p><a href= "{% url 'customuser-detail' user.id %}"> Return to your profile page </a></p>
    <p><a href="{% url 'AddContactList' user.id %}"> Add another contact list</a></p>
    {% for key, value in active_user_contact_lists_contacts.items %}
        <h1> {{key}}</h1> 
        <p><a href="{% url 'AddContact' user.id %}"> Add another contact</a></p>
        {% if value %}
        <ul>

                {% for contact in value %}
                <li> <a href = "{% url 'contact-detail' user.id contact.id %}">{{contact.first_name}}{{contact.id}} {{contact.last_name}}</a></li>
                {% endfor %}
        </ul>
        {% else %}
        <p> This list has no contacts yet </p>
        {% endif %}
    {% endfor %}
</body>
</html>

<!---contacts/templates/contacts/contact-detail.html--->
<!DOCTYPE html>
<html>
<head>
    <title>yerrr</title>
</head>
<body>
    <h1>
        What's good, this is a contact page for {{my_contact.first_name}} who's id = {{my_contact.id}}
    </h1>
    <p>Last contacted: {{my_contact.most_recent_contact_date}}<p>

    <p>This contact's role is: {{my_contact.role}}</p>
</body>
</html>
...