Исключение Значение: Поле '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')
#...
]