我有三个模型CustomUser,Profile和artist。我想要实现的目标是,当我创建customuser时,它还应该创建userprofile和artist。当我更新userprofile字段时,它也应该更新artist字段。
CustomUser模型:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=100, unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
last_login=models.DateTimeField(null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'email'
EMAIL_FIELD='email'
REQUIRED_FIELDS=[]
objects=UserManager()
def get_absolute_url(self):
return "/users/%i/" % (self.pk)
艺术家模型:
class Artist(models.Model):
CHOICES = (
(0, 'celebrities'),
(1, 'singer'),
(2, 'comedian'),
(3, 'dancer'),
(4, 'model'),
(5, 'Photographer')
)
#userprofile = models.ForeignKey(UserProfile,null=True,on_delete = models.CASCADE)
user = models.OneToOneField(CustomUser,null = True, on_delete = models.CASCADE)
name = models.CharField(max_length=100,null= True)
artist_category = models.IntegerField(choices = CHOICES, null=True)
artist_image = models.ImageField(upload_to= 'media',null=True)
bio = models.TextField(max_length = 500)
def __str__(self):
return str(self.name)
UserProfile模型:
class UserProfile(models.Model):
CHOICES = (
(0, 'celebrities'),
(1, 'singer'),
(2, 'comedian'),
(3, 'dancer'),
(4, 'model'),
(5, 'Photographer')
)
user = models.OneToOneField(CustomUser, related_name='userprofile', on_delete= models.CASCADE)
artist = models.ForeignKey(Artist,related_name='userprofile', on_delete=models.CASCADE, null=True)
name = models.CharField(max_length=100, null=True)
artist_category = models.IntegerField(choices= CHOICES, null=True)
mobile_number = PhoneNumberField(null=True)
country = CountryField(default = 'IN')
city = models.CharField(blank=True, max_length=100)
bio = models.TextField(blank=True)
def __str__(self):
return str(self.user)
创建用户个人资料:
def create_profile(sender,instance, created,**kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_profile,sender=CustomUser)
@receiver(post_save, sender= CustomUser)
def save_profile(sender,instance,**kwargs):
instance.userprofile.save()
创作艺术家:
def create_artist(sender,instance,created,**kwargs):
if created:
Artist.objects.create(user = instance)
post_save.connect(create_artist,sender=CustomUser)
一切工作到这里。
从用户个人资料中更新演出者:
def update_user_artist(sender, **kwargs):
instance = kwargs['instance']
instance.artist.name = instance.name
instance.artist.save()
post_save.connect(update_user_artist,sender = UserProfile)
这部分没有输入类型对象错误:
File "/home/tboss/Desktop/environment/celeb/celeb/main_site /models.py", line 175, in update_user_artist
instance.artist.name = instance.name
AttributeError:'NoneType'对象没有属性'name'