Django 为用户信号创建配置文件

Django create profile for user signal

我正在尝试使用信号为用户帐户创建配置文件,但在编写代码后根本没有创建

Django 3.0.5

users/models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_image = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

    def save(self):
        super().save()

        img = Image.open(self.profile_image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.profile_image.path)

users/signals.py

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


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


@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

users/apps.py

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

我检查了互联网上的所有选项,但无法完成这项工作,有人可以帮忙吗,也许我的代码中遗漏了一些东西

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',
    'courses',
    'crispy_forms',

]

我可以在 apps.py 中看到此消息:

未使用的导入语句'import users.signals'

并在 signals.py 中: 参数'sender'值未使用

未使用参数“**kwargs”值

使用 PyCharm 专业

替换

INSTALLED_APPS = [
   ...
   'users',
   ...
]

为了

INSTALLED_APPS = [
   ...
   'users.apps.UsersConfig',
   ...
]

如果您没有指定应用程序配置的路径 class,Django 将使用文档 https://docs.djangoproject.com/en/3.0/ref/applications/ 中提到的基础路径。因此,您的配置未被使用,这导致信号文件在应用程序注册期间未被导入,因此信号未被注册。

您可以将 app's config 添加到两个文件中的任何一个。

  1. 在您的 settings.py 文件的 INSTALLED_APPS 中,如上所述。

或者,

  1. 在你相关的 app__init__.py 文件中,像这样(在这个例子中,相关的应用程序是 users): default_app_config = 'users.apps.UsersConfig'