我得到以下两行错误:
subscriber.email.add(self.cleaned_data.get('email'))
subscriber.address.add(self.cleaned_data.get('address'))
我正在使用AbstractUser模型,并试图通过添加新的模型类来添加额外的字段。下面是我的代码:
models.py
class UserManagement(AbstractUser):
is_subscriber = models.BooleanField(default=False)
is_blog_author = models.BooleanField(default=False)
is_editor = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
class Subscriber(models.Model):
user = models.OneToOneField(UserManagement, on_delete=models.CASCADE, primary_key=True)
email = models.EmailField(max_length=100)
address = models.CharField(max_length=100)
froms.py
class SubscriberSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
address = forms.CharField(max_length=100)
class Meta(UserCreationForm.Meta):
model = UserManagement
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.is_subscriber = True
user.save()
subscriber= Subscriber.objects.create(user=user)
subscriber.email.add(self.cleaned_data.get('email'))
subscriber.address.add(self.cleaned_data.get('address'))
return user
views.py
class SubscriberSignUpView(CreateView):
model = UserManagement
form_class = SubscriberSignUpForm
template_name = 'registration.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'subscriber'
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('blog:my-account')
控制台错误:
File "P:djangodjangofarhynmembersforms.py", line 21, in save
subscriber.email.add(self.cleaned_data.get('email'))
AttributeError: 'str' object has no attribute 'add'
[27/Jul/2021 08:29:31] "POST /subscriber-signup/ HTTP/1.1" 500 99927
email
和address
是字符串字段,并且在Python中str
对象没有add(...)
方法。
很可能,你正在寻找这样的东西,
class SubscriberSignUpForm(UserCreationForm):
email = forms.EmailField(max_length=100)
address = forms.CharField(max_length=100)
class Meta(UserCreationForm.Meta):
model = UserManagement
@transaction.atomic
def save(self, commit=True):
user = super().save(commit=False)
user.is_subscriber = True
user.save()
Subscriber.objects.create(
user=user,
email=self.cleaned_data.get('email'),
address=self.cleaned_data.get('address')
)
return user
你不能在电子邮件中使用add,因为它是一个字符串。
subscriber.email = self.cleaned_data.get('email')
subscriber.address = self.cleaned_data.get('address')