Я пытаюсь получить значение моего столбца name
в моей модели Category
, которая связана с моей Post
моделью. Я хочу сохранить значение name
в переменной для последующего использования. Я пробовал print(post.categories.name)
, но он возвращает значение None
. Я могу подтвердить фактическое значение, запустив post.categories.values()
, который вернет <QuerySet [{'id': 1, 'name': 'General'}]>
Модель:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=30)
class Post(models.Model):
title = models.SlugField(max_length = 250, null = True, blank = True)
body = models.TextField()
created_on = models.DateTimeField(null=True)
last_modified = models.DateTimeField(null=True)
categories = models.ManyToManyField('Category', related_name='posts')
class Comment(models.Model):
author = models.CharField(max_length=60)
body = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
Просмотры:
def blog_detail(request, pk):
post = Post.objects.select_related().get(pk=pk)
category = post.categories.name # This returns None but should return General
form = CommentForm()
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = Comment(
author=form.cleaned_data["author"],
body=form.cleaned_data["body"],
post=post
)
comment.save()
comments = Comment.objects.filter(post=post)
context = {
"post": post,
"comments": comments,
"form": form,
}
return render(request, "blog_detail.html", context)
Если вы хотите все названия категорий, вы можете сделать names = [category.name for category in post.categories.all()]
Вы не можете. Вы определили categories
как ManyToManyField
в своей модели Post
, поэтому post.categories
— это ModelManager
для получения категорий, а post.categories.all()
возвращает все категории, связанный с post
.
Вы можете получить список имен для категорий поста следующим образом:
category_names = [category.name for category in post.categories.all()]
Данг. Могу ли я изменить это в своей модели, чтобы пост мог иметь только одну категорию? Я не планирую добавлять несколько категорий для каждого сообщения. Дело в том, что я хотел бы получить чистое значение из моей базы данных, чтобы сохранить его как переменную. Это возвращает значение в виде объекта списка ['Общие'], который мне не нужен.
Если сообщение может иметь только одну категорию, вам следует использовать ForeignKey, а не ManyToManyField.
Понятно. Спасибо!
Пост может иметь несколько категорий, какую из них вы хотите?