Как предварительно заполнить поля UserProfile в админке Django? - PullRequest
1 голос
/ 16 февраля 2011

Предварительное заполнение большинства полей модели в админке (полезно для генерации слагов) кажется простым, если вы используете:

prepopulated_fields = {"slug": ("name",)}  

Но когда я использую приведенный ниже код, чтобы попытаться предварительно заполнить поле UserProfile, он выдает это сообщение об ошибке, даже если у меня явно есть пробел в модели UserProfile. (Это просто выглядит не в той модели, и я не знаю, как это исправить ...)

ОШИБКА:

Неправильно настроен в / admin /
«UserProfileAdmin.prepopulated_fields» относится к полю «slug», отсутствующему в модели «User».

В 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 Ответ

2 голосов
/ 16 февраля 2011

slug - это поле в UserProfile, но prepopulated_fields = {"slug": ("name",)} - это атрибут UserProfileAdmin, который применяется к User.

prepopulated_fields запускает некоторый javascript, который автоматически генерирует значение SlugField из значений некоторых других полей той же модели . То, что вы пытаетесь, это предварительно заполнить поле другой модели . UserProfileAdmin применяется к User, prepopulated_fields относится к полю slug, которое не известно модели User. Это определено в UserProfile.

Вот почему я думаю, что самая большая проблема здесь - это имя UserProfileAdmin, которое должно быть UserAdmin. Не путайте модель, к которой применяется prepopulated_fields, с моделью, которая встроена. Даже когда есть отношение OneToOne, оно все равно является другой моделью.

...