Мои сигналы перестали работать после расширения моей пользовательской модели по умолчанию с помощью BaseUserAdmin - PullRequest
0 голосов
/ 12 октября 2019

У меня был рабочий сигнал, который создает новый профиль при создании нового пользователя, но я хотел расширить пользователей как учитель, родитель или администратор, после чего он перестал работать.

Models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.core.validators import MaxValueValidator
from phone_field import PhoneField


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    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.image.path)

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



class Parent(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        return '{}, {}'.format(self.last_name, self.first_name)


class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        return '{}, {}'.format(self.last_name, self.first_name)

Admin.py

from django.contrib import admin
from .models import Profile, Student, Teacher, Parent
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User

class ParentInLine(admin.TabularInline):
    model = Parent
    can_delete = False
    verbose_name_plural = 'parent'

class TeacherInLine(admin.TabularInline):
    model = Teacher
    can_delete = False
    verbose_name_plural = 'teacher'


class UserAdmin(BaseUserAdmin):
    inlines = (ParentInLine, TeacherInLine)

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

admin.site.register(Profile)
admin.site.register(Teacher)
admin.site.register(Parent)

Signals.py

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, **kwargs):
    if created:
        Profile.objects.create(User = instance)

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

Apps.py

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

Нет ошибок,но я просто не могу позволить ему автоматически создавать профиль для каждого нового пользователя. Что-то я делаю не так? Или что-то, что мне нужно сделать?

1 Ответ

0 голосов
/ 13 октября 2019

Я нашел решение для моей проблемы. Я редактировал свою функцию «create_profile».

From:

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

To:

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

Затем я добавил в свой

init.py

default_app_config = 'users.apps.UsersConfig'

Затем он начал работать. Я застрял с этой конкретной проблемой в течение 4 дней, и я в основном новичок с 2 до 3 недель опыта Django. Надеюсь, что это поможет другим, если вы столкнетесь с той же проблемой.

...