python - 查询相关对象的列值并存储为变量
问题描述
我试图name
在我的模型Category
中获取与我的模型相关联的列的值Post
。我想将 的值保存name
到变量中以备后用。我试过print(post.categories.name)
了,但它返回 value None
。post.categories.values()
我可以通过运行which 返回来确认有一个实际值<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)
解决方案
你不能。您在模型上定义categories
为 a ,因此a获取类别并返回与关联的所有类别。ManyToManyField
Post
post.categories
ModelManager
post.categories.all()
post
您可以像这样获取帖子类别的名称列表:
category_names = [category.name for category in post.categories.all()]
推荐阅读
- c# - 什么会导致 WinForms richTextBox.DataBindings.Add() 抛出空引用异常?
- scala - 如何在 scala 2.13+ 中找到 Seq 的最小值
- react-native - 如何在 Text 标签中显示 this.state 值?
- javascript - 如何从角度服务对 propublica.org 进行 Web api 调用
- c++ - 用于关联容器的 C++ 入门 5ed equal_range
- php - 如何将数组放入mysql数据库?
- nginx - nginx 将 websocket API 数据视为 http 请求
- android - React Native - 无法在 ScrollView 内滚动,包裹在 Android 上的动画视图中
- bash - 尝试打印出包含最早/最晚日期的行
- c - 分数报告问题