'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',)