related_name – Django 内置字段验证
related_name 属性指定从 User 模型返回到您的模型的反向关系的名称。如果您没有指定 related_name,Django 会自动使用您的模型名称和后缀 _set 创建一个。
句法:
field_name = models.Field(related_name="name")
解释:
使用示例说明 related_name="name"。考虑一个名为 suorganizer(启动组织者)的项目,它有一个名为 Organizer 的应用程序。
Refer to the following articles to check how to create a project and an app in Django.
How to Create a Basic Project using MVT in Django ?
How to Create an App in Django ?
将以下代码输入到管理器应用程序的 models.py 文件中。
Python
from django.db import models
# Create your models here.
class Tag(models.Model):
name = models.CharField(max_length = 31)
def __str__(self):
return self.name.title()
class Post(models.Model):
title = models.CharField(max_length = 63)
tags = models.ManyToManyField(Tag, related_name ='blog_posts')
def __str__(self):
return self.title
在 Django 上运行 makemigrations 和 migrate 并渲染上述模型后,让我们尝试使用 Django shell 中的 None 创建一个实例。要启动 Django shell,请输入命令。
Python manage.py shell
现在让我们尝试使用 None 创建 Tag 和 Post 的实例。
# importing required model
from organizer.models import Tag, Post
# creating instance of Tag model
r = Tag.objects.create(name ="django")
r.save()
# creating instance of Post model
s = Post.objects.create(title ="About django")
s.save()
# accessing objects
t = Tag.objects.get(name ="django")
p = Post.objects.get(title ="About django")
# method1--adding tag to post using post object
p.tags.add(t)
# method2--adding tag to post using tag object
# which is possible with related_name
t.blog_posts.add(p)
如果创建了模型实例,让我们检查管理界面。
1.标签对象:
2.发布对象
在 Django 中,我们只在一个地方指定对称关系。 related_name 参数定义了关系的另一端。具体来说,给定一个 Post 实例 p,可以通过 p.tags 访问与该帖子关联的标签。然而,给定一个 Tag 实例 t,我们没有明确定义一个变量来访问 Post 对象。多亏了 related_name 选项,我们现在可以通过 blog posts 属性访问与标签 t 相关的博客文章列表,如 t.blog_posts。相关的_name 参数实际上是一个选项。如果我们不设置它,Django 会自动为我们创建关系的另一端。在 Tag 模型的情况下,Django 会创建一个 post_set 属性,在我们的示例中允许通过 t.post_set 进行访问。 Django 使用的公式是模型名称后跟 string_set。因此,相关的 name 参数只是覆盖了 Django 的默认值,而不是提供新的行为。