related_name – Django内置字段验证

related_name – Django内置字段验证

related_name属性指定了从用户模型返回到你的模型的反向关系的名称。如果你没有指定related_name,Django会使用你的模型名称和后缀_set自动创建一个。

语法:

field_name = models.Field(related_name="name")

解释:

用一个例子说明related_name=”name”。考虑一个名为suorganizer(start up organizer)的项目,有一个名为organizer的应用程序。

在组织者应用程序的models.py文件中输入以下代码。

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.标签对象。

related_name - Django内置字段验证

2.Post object

related_name - Django内置字段验证
related_name - Django内置字段验证

在Django中,我们只在一个地方指定对称关系。related_name参数是定义关系的另一端。具体来说,给定一个Post实例p,与这个帖子相关的标签可以通过p.tags访问。然而,给定一个Tag实例t,我们没有明确定义一个变量来访问Post对象。多亏了related_name选项,我们现在可以通过blog posts属性访问与标签t相关的博客帖子列表,如t.blog_posts。related_name参数实际上是一个选项。如果我们不设置它,Django会自动为我们创建关系的另一端。在Tag模型的情况下,Django会创建一个post_set属性,在我们的例子中允许通过t.post_set访问。Django使用的公式是模型的名称,然后是字符串_set。因此,相关的名称参数只是覆盖了Django的默认值,而不是提供新的行为。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程