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。谢谢