'NoneType'对象没有属性'name'django

时间:2019-11-19 07:59:28

标签: django python-3.x

我有三个模型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'

0 个答案:

没有答案
相关问题