Django 'str' 对象没有属性 'add'



我得到以下两行错误:

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

emailaddress是字符串字段,并且在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')

最新更新