如果你使用的话,预先填写admin中的大多数模型字段(对于生成slug非常有用)似乎很简单:
prepopulated_fields = {"slug": ("name",)}
但是当我使用下面的代码尝试预填充UserProfile字段时,它会给出此错误消息,即使我明显在UserProfile模型中有一个slug。 (它只是在寻找错误的模型,我不知道如何解决这个问题......)
ERROR:
在/ admin / 处不正确配置 'UserProfileAdmin.prepopulated_fields'指的是模型'User'中缺少的字段'slug'。
在settings.py中:
AUTH_PROFILE_MODULE = 'myapp.UserProfile'
在models.py中:
class UserProfile(models.Model):
user = models.OneToOneField(User)
slug = models.SlugField(max_length=50)
在admin.py中:
class UserProfileInline(admin.StackedInline):
model = UserProfile
max_num = 1
can_delete = False
class UserProfileAdmin(admin.ModelAdmin):
inlines = [UserProfileInline]
prepopulated_fields = {"slug": ("name",)}
admin.site.unregister(User)
admin.site.register(User, UserProfileAdmin)
有人能在这里发现错误的原因吗?
答案 0 :(得分:2)
slug
是UserProfile
中的字段,但prepopulated_fields = {"slug": ("name",)}
是UserProfileAdmin
的属性,适用于User
。
prepopulated_fields
会触发一些javascript,这些javascript会自动生成SlugField的值,而不是相同型号的某些其他字段的值。您正在尝试的是预填充不同模型的字段。 UserProfileAdmin
适用于User
,prepopulated_fields
引用模型slug
未知的字段User
。它在UserProfile
中定义。
这就是为什么我认为这里最大的问题是名称UserProfileAdmin
,而应该是UserAdmin
。不要混淆应用prepopulated_fields
的模型与内联的模型。即使存在OneToOne关系,它仍然是一个不同的模型。