Как решить проблему "TypeError: Field.__init__() получил неожиданный аргумент ключевого слова 'choices'"?
Недавно я решил обновить файл forms.py моего проекта Django, чтобы сделать одно из полей не пустым текстовым полем, а выпадающим меню. В моем файле forms.py я изменил класс для customers с;
class CustomerSignUpForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email_address = forms.EmailField(required=True)
membership_tier = forms.CharField(required=True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def data_save(self):
user = super().save(commit=False)
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.is_customer = True
user.save()
customer = Customer.objects.create(user=user)
customer.email_address = self.cleaned_data.get('email_address')
customer.membership_tier = self.cleaned_data.get('membership_tier')
customer.save()
return user
к следующему
class CustomerSignUpForm(UserCreationForm):
member_tiers = (
'Basic',
'Intermediate',
'Beast'
)
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email_address = forms.EmailField(required=True)
membership_tier = forms.CharField(choices = member_tiers, default = 'Basic', required=True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def data_save(self):
user = super().save(commit=False)
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.is_customer = True
user.save()
customer = Customer.objects.create(user=user)
customer.email_address = self.cleaned_data.get('email_address')
customer.membership_tier = self.cleaned_data.get('membership_tier')
customer.save()
return user
Вот мой класс customer в моем models.py, если это поможет,
class Customer(models.Model):
member_tiers = (
'Basic',
'Intermediate',
'Beast'
)
username = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
email_address = models.EmailField(max_length=30)
membership_tier = models.CharField(max_length = 30, choices = member_tiers, default = 'Basic')
Мой вопрос сводится к следующему: Сделал ли я правильные изменения в моем файле forms.py, и если нет, то что я могу взять из этого, чтобы научиться в следующий раз?
forms.CharField
не имеет аргумента choices
. См. документацию об этом типе поля.
Вы хотите ChoiceField