Python 查询相关对象的列值并存储为变量
我试图获取我的模型Python 查询相关对象的列值并存储为变量,python,django,Python,Django,我试图获取我的模型类别中我的name列的值,该列链接到我的Post模型。我想将name的值保存到一个变量中,供以后使用。我尝试了print(post.categories.name)但它返回值None。我可以通过运行返回的post.categories.values()来确认是否存在实际值 型号: from django.db import models class Category(models.Model): name = models.CharField(max_length
类别中我的name
列的值,该列链接到我的Post
模型。我想将name
的值保存到一个变量中,供以后使用。我尝试了print(post.categories.name)
但它返回值None
。我可以通过运行返回的
post.categories.values()
来确认是否存在实际值
型号:
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)
你不能。您在Post
模型上将categories
定义为ManyToManyField
,因此Post.categories
是一个ModelManager
来获取类别,并Post.categories.all()
返回与Post
关联的所有类别
您可以获得帖子类别的名称列表,如下所示:
category_names = [category.name for category in post.categories.all()]
一篇文章可以有多个类别,您想要哪一个?如果您想要所有类别的名称,可以执行name=[category.name for category in post.categories.all()]
Dang。我可以在我的模型中更改此选项,使帖子只能有一个类别吗?我不打算为每个帖子添加多个类别。问题是,我想从数据库中获取纯值,将其保存为变量。这将以列表对象['General']的形式返回值,我不希望这样。如果一篇文章只能有一个类别,那么应该使用ForeignKey而不是ManyToManyFieldGot。谢谢