'error : 只能将 str/tuple(不是 "tuple/str) 连接到 str/tuple" 将字段添加到 UserCreationForm 时出错



我试图添加新的字段到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',)

最新更新