'profile' 这个词是 Django 中的内置功能吗?

Is the word 'profile' an in build feature in Django?

我是 Django 的新手。下面的代码是在新用户注册我的博客应用程序时创建用户配置文件。

疑问:- 为什么我们在最后一行代码中使用配置文件而不是配置文件? 请注意大写单词 'Profile'

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, *args,**kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_profile(sender, instance, *args,**kwargs):
    instance.profile.save()'''  #last code line

,它不是内置功能。如果你从你的模型中定义一个关系(例如 ProfileUser),Django 会自动创建一个反向关系。您可以使用 related_name 属性指定该关系的名称。

因此,您可以通过更改关系的 related_name [Django-doc] 来指定不同的名称,例如:

from django.db import models
from django.contrib.auth import get_user_model

class Profile(models.Model):
    user = models.OneToOneField(
        get_user_model(),
        on_delete=models.CASCADE,
        <b>related_name='other_attribute'</b>
    )

在这种情况下,配置文件的名称是:

from django.contrib.auth import get_user_model

@receiver(post_save, sender=get_user_model())
def save_profile(sender, instance, *args,**kwargs):
    instance.<b>other_attribute</b>.save()

默认情况下 related_name 值是 class 的名称,但在 小写 中,并带有下划线 (_)单词分隔符。

这是根据 PEP-8,其中 class 的属性以小写字母书写,并使用下划线作为单词分隔符。

我认为在你的代码中 简介 是模特的名字:

Class Profile(models.Model)

profile是related_name的反向关系如:

class Profile(models.Model):
user= models.OneToOneField(User,on_delete=models.CASCADE,related_name="profile")

当你想使用模型的所有对象时使用:

Profile.objects.all()

当您需要用户对象时:

userobject.profile.<other fields name>