django中的相关模型查询
Posted
技术标签:
【中文标题】django中的相关模型查询【英文标题】:related models queries in django 【发布时间】:2018-09-13 09:37:33 【问题描述】:我有如下相互关联的树模型:
第一堂课有项目的基本信息。
class Project(models.Model):
customer = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete = models.CASCADE,)
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(default=timezone.now)
第二个类用于注册每个项目相关的类别。
class ProjectCategory(models.Model):
project = models.ForeignKey(
Project,
on_delete = models.CASCADE)
projectCategory = models.ForeignKey(
Category,
on_delete=models.CASCADE)
最后一个模型表示项目的位置。
class ProjectLocation(models.Model):
project = models.ForeignKey(
Project,
on_delete = models.CASCADE)
projectLocation = models.ForeignKey(
Location,
on_delete=models.CASCADE)
我试图在模板中呈现项目列表。 我想显示与每个项目相关的信息(类别和位置)。 怎么能做到呢? 使用查询 Project.objects.all() 不允许我访问“projectLocation”和“projectCategory”字段。
【问题讨论】:
您的项目模型没有这些字段。要访问相关模型,您必须将_set
添加到诸如projectLocation_set
之类的字段名称中。请记住,all() 返回的列表不仅仅是单个元素。
projectLocation 还是 projectlocation?我应该将 ProjectLocation 对象添加到视图的上下文中吗?
您在上下文中获得了主要对象,因此不需要,在模板执行期间将获取所有需要的数据,所以不需要,您不需要将相关对象添加到上下文中。更多信息:@987654321 @
它是一种魅力。最后一个问题,调用 _set 是否会降低模板渲染速度?
很多?它始终取决于您使用的数据库和数据集的大小。但是我猜你现在不应该关心性能,所有性能升级都应该在出现性能问题时进行????
【参考方案1】:
在您的外键字段中添加related_name
,您可以通过此名称访问它们。
例如项目类别:
class ProjectCategory(models.Model):
project = models.ForeignKey(Project, related_name='categories')
所以现在你可以这样做:
project.categories.all()
【讨论】:
以上是关于django中的相关模型查询的主要内容,如果未能解决你的问题,请参考以下文章