'error : can only concatenate str/tuple(not "tuple/str) to str/tuple' error in adding fields to UserCreationForm

я пытался добавить новые поля в UserCreationForm с помощью CustomUserCreationForm, но получил эту ошибку

TypeError:can only concatenate str(not "tuple") to str

и когда я меняю поле на str, я получаю другое,

вот мой код:

forms.py:

    from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm

from .models import CustomUser

class CustomUserCreationform(UserCreationForm):
    #new UsercreationForm
    class Meta(UserCreationForm):
        #new meta for UserCreationForm
        model = CustomUser 
        fields = UserCreationForm.Meta.fields + ('age',)

class CustomUserChangeForm(UserChangeForm):
    #new UserChangeForm
    model = CustomUser
    fields = UserChangeForm.Meta.fields +('age',)

admin.py:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    #new UserAdmin to change defualt model
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email','username','age','is_staff',]

admin.site.register(CustomUser,CustomUserAdmin)

models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    age = models.PositiveIntegerField(null=True,blank=True)

idk whats wrong with code can u help pls?

По умолчанию UserChangeForm включает все поля, для чего используется сокращение fields = '__all__'

Когда вы пытаетесь сделать UserChangeForm.Meta.fields +('age',), вы делаете '__all__' + ('age',), о чем и говорит ошибка, которую вы получаете. Обычно такая ошибка в Python включает трассировку стека, которая также включает строку, в которой произошла ошибка, что может помочь вам отлаживать такие проблемы в будущем.

Если вам нужны все поля, вы можете сделать

    class CustomUserChangeForm(UserChangeForm):
        #new UserChangeForm
        model = CustomUser
        fields = '__all__'

Если вам нужны конкретные поля, будьте явными

class CustomUserChangeForm(UserChangeForm):
    #new UserChangeForm
    model = CustomUser
    fields = ('first_name', 'last_name', 'email', 'age',)
Вернуться на верх