"django.core.exceptions.ValidationError: [''post_id'' не является действительным UUID.']" с вроде бы действительным UUID
Это простое приложение для блога, которое я создаю. У меня есть модель, которая создает статью и генерирует UUID для каждой созданной статьи. Все работает так, как ожидалось.
Я сейчас пытаюсь создать переменную представления, содержащую объект "post_id" из моей модели "Post", чтобы потом вставить эту переменную в мой html-шаблон. Смущает то, что я знаю, что модель Post генерирует правильный UUID (по крайней мере, в моем понимании UUID), поскольку я видел, как он генерируется, поэтому я не знаю, с чего начать поиск решения этой проблемы. Другие похожие проблемы в Интернете, похоже, не связаны с моей проблемой.
myapp/views.py
from django.shortcuts import render
from django.utils import timezone
from .models import Post
def blog_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
post_uid = Post.objects.get(pk="post_id")
context = {
"post_uid": post_uid,
"posts": posts
}
return render(request, 'blog/blog_list.html', context)
def article(request, post_id):
current_article = Post.objects.get(pk=post_id)
return render(request, 'blog/article.html', {'current_article':current_article})
myapp/model.py
from django.db import models
from django.conf import settings
from django.utils import timezone
import uuid
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
Возвращаемые ошибки
Также, если это ценно - последний файл миграции с того момента, когда был добавлен объект post_id.
myapp/migrations/0002_auto_20210830_1450.py
from django.db import migrations, models
import uuid
def create_uuid(apps, schema_editor):
Post = apps.get_model('blog', 'Post')
for x in Post.objects.all():
x.post_id = uuid.uuid4()
x.save()
class Migration(migrations.Migration):
dependencies = [
('blog', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='post',
name='id',
),
migrations.AddField(
model_name='post',
name='post_id',
field=models.UUIDField(blank=True, null=True),
),
migrations.RunPython(create_uuid),
migrations.AlterField(
model_name='post',
name='post_id',
field=models.UUIDField(default=uuid.uuid4, unique=True)
)
]
Ваш запрос выглядит неправильно. Вы использовали кавычки вокруг post_id
post_uid = Post.objects.get(pk="post_id")
попробуйте это вместо вышеприведенного без кавычек:
post_uid = Post.objects.get(pk=post_id)
Также в вашем методе blog_list
отсутствует параметр post_id. Вам необходимо передать параметр post_id
в этот метод.