我试图添加新的字段到UserCreationForm使用CustomUserCreationForm,但我得到这个错误
TypeError:只能将str(not"tuple")连接到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)
我想代码有什么问题,你能帮忙吗?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',)