Исключение Значение: Поле 'id' ожидало число, но получило 'create-room'

Я застрял с этой ошибкой и не могу найти решение. Я следил за курсом YouTube на канале под названием "Traversy Media", и он называется "Python Django 7-часовой курс", и эта часть находится примерно на 01:39 минуте в разделе видео "CRUD".

это файл home.html

{% extends 'main.html'%} {% block content %}

<h1>Home PAGE</h1>

<div>
  <a href="{% url 'create-room' %}">Create room </a>
  <div>
    {% for room in rooms %}
    <div>
      <span>@{{room.host.username}}</span>
      <h4>
        {{room.id}} -- <a href="{% url 'room' room.id %}">{{room.name}}</a>
      </h4>
      <small>{{room.topic.name}}</small>
      <hr />
    </div>
    {% endfor %}
  </div>
</div>
{% endblock content %}

На главной странице есть ссылка "создать комнату", которая перенаправляет на файл room-form.html, который является шаблоном для создания и обновления комнаты.

{% extends 'main.html' %} {% block content %}
<div>
  <form method="post" action="">
    {% csrf_token %}
    <input type="submit" value="Submit" />
  </form>
</div>
{% endblock content %}

здесь находится файл urls.py

from . import views
from django.urls import path

urlpatterns = [
    path('', views.home, name='home'),
    path('room/<str:pk>/', views.room, name='room'),
    path('create-room/', views.createRoom, name='create-room'),

]

вот файл views.py

from django.shortcuts import render
from .models import Room

# Create your views here.=


def home(request):
    rooms = Room.objects.all()
    context = {'rooms': rooms}
    return render(request, 'base/home.html', context)


def room(request, pk):
    room = Room.objects.get(id=pk)
    context = {'room': room}
    return render(request, 'base/room.html', context)


def createRoom(request):
    context = {}
    return render(request, 'base/room_form.html', context)

и вот файл models.py

from django.db import models
from django.contrib.auth.models import User


# Create your models here.

class Topic(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Room(models.Model):
    host = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    topic = models.ForeignKey(Topic, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=100)
    description = models.TextField(null=True, blank=True)
    # participants =
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name


class Message(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
    body = models.TextField()
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.body[0:40]

Я ничего не пробовал, потому что я даже не знаю, почему происходит эта ошибка.

Измените <str:pk>/ на <int:pk>/ так:

urlpatterns = [
    #...
    path('room/<int:pk>/', views.room, name='room')
    #...
]
Вернуться на верх