Как решить проблему "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

Вернуться на верх