如何在Django管理员中预填充UserProfile字段?

时间:2011-02-16 08:18:54

标签: python django django-models django-admin

如果你使用的话,预先填写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)  

有人能在这里发现错误的原因吗?

1 个答案:

答案 0 :(得分:2)

slugUserProfile中的字段,但prepopulated_fields = {"slug": ("name",)}UserProfileAdmin的属性,适用于User

prepopulated_fields会触发一些javascript,这些javascript会自动生成SlugField的值,而不是相同型号的某些其他字段的值。您正在尝试的是预填充不同模型的字段。 UserProfileAdmin适用于Userprepopulated_fields引用模型slug未知的字段User。它在UserProfile中定义。

这就是为什么我认为这里最大的问题是名称UserProfileAdmin,而应该是UserAdmin。不要混淆应用prepopulated_fields的模型与内联的模型。即使存在OneToOne关系,它仍然是一个不同的模型。