Django ';非类型';对象没有属性';名称';德扬戈

Django ';非类型';对象没有属性';名称';德扬戈,django,python-3.x,Django,Python 3.x,我有三个模型用户,个人资料和艺术家。我想要实现的是,当我创建customuser时,它应该创建userprofile和Artister。当我更新userprofile字段时,它也应该更新Artister字段 自定义用户模型: class CustomUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(max_length=100, unique=True) is_staff = models.BooleanFie

我有三个模型用户,个人资料和艺术家。我想要实现的是,当我创建customuser时,它应该创建userprofile和Artister。当我更新userprofile字段时,它也应该更新Artister字段

自定义用户模型:

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)
用户配置文件模型:

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)
一切都在这里工作

正在从userprofile更新艺术家:

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:“非类型”对象没有属性“名称”

请尝试先注释掉post_save以测试并查看Artister外键是否保存到您的用户?您可以共享完整的回溯吗?是的,Artister外键保存到用户中