Я новичок в 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>