Как добавить поле выбора в класс на основе UserCreationForm?

#django

#django

Вопрос:

у меня вопрос, как я могу добавить поле выбора в класс UserCreationForm. я пытался добавить, но проблема в том, что «слишком много значений для распаковки (ожидается 2)», я не знаю почему. у меня есть приведенный ниже код. Спасибо за помощь

мой model.py

 class Viewer(models.Model):
    INTERESTS_CHOICES = (
        ('IT', 'IT'),
        ('MARKETING', 'marketing'),
        ('BUISINESS', 'buisiness'),
        ('DESIGN', 'design'),
    )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    interests = models.CharField(choices=INTERESTS_CHOICES, max_length=8, default='IT')
    def __str__(self):
        return self.user.username
 

мой forms.py

 INTERESTS_CHOICES = (
        ('IT', 'IT'),
        ('MARKETING', 'marketing'),
        ('BUISINESS', 'buisiness'),
        ('DESIGN', 'design'),
    )
class ViewerRegisterForm(UserCreationForm):

    email = forms.EmailField(required=False)
    interests = forms.ChoiceField(choices=[INTERESTS_CHOICES])
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.is_viewer = True
        user.save()
        viewer = Viewer.objects.create(user=user)
        return user
 

Ответ №1:

попробуйте убрать скобки списка рядом с вариантами выбора, и, может forms.Select быть, это сработает лучше?

 class ViewerRegisterForm(UserCreationForm):
    fields = ['username', 'interests', 'email', 'password1', 'password2']

widgets = {
    interests = forms.Select(choices=INTERESTS_CHOICES)}