简体   繁体   中英

AttributeError at /accounts/signup/ 'str' object has no attribute 'add'

Am new using django so i used practical example on this tutorial on extending user model using User Profile, am having trouble on form.py it gives that error, on removing this line; supervisor.su_mobile_number.add(*self.cleaned_data.get('su_mobile_number')) it works smoothly but no data for su_mobile_number was inserted o the database

view.py

class SupervisorSignUpView(CreateView):
     model = User
     form_class = SupervisorSignUpForm
     template_name = 'registration/signup_form.html'

def get_context_data(self, **kwargs):
    kwargs['user_type'] = 'supervisor'
    return super().get_context_data(**kwargs)

def form_valid(self, form):
    user = form.save()
    login(self.request, user)
    return redirect('home')

model.py

class User(AbstractUser):
   is_supervisor = models.BooleanField(default=False)
   is_student = models.BooleanField(default=False)


class Supervisor(models.Model):
   user = models.OneToOneField('User', on_delete=models.CASCADE, primary_key=True, related_name='supervisor')
   su_mobile_number = models.CharField(max_length=200)

forms.py

class SupervisorSignUpForm(UserCreationForm):
 su_mobile_number = forms.CharField()

class Meta(UserCreationForm.Meta):
    model = User

@transaction.atomic
def save(self):
    user = super().save(commit=False)
    user.is_supervisor = True
    user.save()
    supervisor = Supervisor.objects.create(user=user)
    supervisor.su_mobile_number.add(*self.cleaned_data.get('su_mobile_number'))
    return user

Use = operator to assign value and then call save() method

@transaction.atomic
def save(self):
    user = super().save(commit=False)
    user.is_supervisor = True
    user.save()
    supervisor = Supervisor.objects.create(user=user)
    
    return user

more shorter way is (as @Abdul Niyas PM mentioned)

@transaction.atomic
def save(self):
    user = super().save(commit=False)
    user.is_supervisor = True
    user.save()
    
    return user

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM