我在我的Django应用程序中遇到了一个问题,我需要根据www.example.com _manager的值创建不同的配置文件,Profile1或Profile2user.is。我使用信号来处理这个逻辑。
以下是问题的摘要:
- 我有两个模型:配置文件1和配置文件2。Profile1适用于管理员用户,而Profile2适用于非管理员用户。
- 在我的managers.py文件中,我在user.is创建用户期间将管理器用户的www.example.com _manager设置为True。
- 但是,当我尝试访问instance.is_managersignals.py时,它始终返回False,尽管根据managers.py中设置的值,它应该是True。
is_manager字段在数据库中正确设置为True,但在信号处理过程中仍为False
任何建议或见解,以解决这个问题将不胜感激。
# managers.py
from django.contrib.auth.models import BaseUserManager
class UserManager(BaseUserManager):
def create_user(self, phone, username, email, password):
user = self.model(phone=phone, username=username, email=email)
user.set_password(password)
user.save(using=self.db)
return user
def create_superuser(self, phone, username, email, password):
user = self.create_user(phone, username, email, password)
user.is_admin = True
user.is_manager = True # when create a superuser it's a manager too
user.save(using=self.db)
return
# apps.py
from django.apps import AppConfig
class PanelConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'panel'
def ready(self):
import panel.signals
# signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from .models import User
from accounts.models import Profile1, Profile2
@receiver(post_save, sender=User, dispatch_uid="panel.signals.create_profile")
def create_profile(sender, instance, created, **kwargs):
if created:
if instance.is_manager: # this returns False
profile = Profile1.objects.create(user=instance)
else:
profile = Profile2.objects.create(user=instance)
profile.save()
我已经检查了我的代码,并验证了user.is_manager在managers.py中正确设置为True。我正在寻找关于为什么instance.is_manager的价值没有在信号中准确捕获的指导。
1条答案
按热度按时间toiithl61#
用这个代码不用发信号它很简单。。