📜  related_name – Django 内置字段验证

📅  最后修改于: 2022-05-13 01:54:58.996000             🧑  作者: Mango

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 的默认值,而不是提供新的行为。