Использование новой формы администратора при настройке пользовательской модели Django - PullRequest
0 голосов
/ 25 июля 2011

Я расширяю модель пользователя, но, похоже, у меня возникли проблемы с использованием моей новой формы администратора.У меня есть следующий код в models.py:

    class Preference(models.Model):
        choice = models.TextField(choices = (('grid', 'grid'), ('list','list'))) 

        def __unicode__(self):
            return self.choice

    class UserProfile2(models.Model):
        preference = models.ForeignKey(Preference, default = Preference.objects.get(id=2).id)
        user = models.OneToOneField(User, unique=True)

    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            print 'creating user profile2'
            u = UserProfile2.objects.create(user=instance)   

    post_save.connect(create_user_profile, sender=User)

Следующий код находится в admin.py:

    class UserProfileInline(admin.TabularInline):
        model = UserProfile2
        fk_name = 'user'

    class CustomUserAdmin(UserAdmin):
        inlines = [UserProfileInline,]

    admin.site.unregister(User)
    admin.site.register(User, CustomUserAdmin)     

Следующее находится в settings.py:

    AUTH_PROFILE_MODULE = 'userextension.UserProfile2' 

Он работает правильно, когда пользователь не пытается управлять значением объекта предпочтения в admin, и создает нового пользователя, используя значение по умолчанию.Но если пользователь пытается перейти от значения по умолчанию «list» и вместо этого использует «grid», я получаю ошибку «Duplicate Entry for Key user_id».

Нужно ли явно получать значение изформу администратора для дополнительного поля и сохранить как объект userprofile2, так и объект пользователя?Если так, как это связано с ошибкой, которую я получаю?Я не нашел много документации о том, как это сделать, и был бы очень признателен за любое направление.

Обновление: это тоже кажется важным: когда я удаляю значение по умолчанию для предпочтения в модели UserProfile2, я получаю сообщение об ошибке «Столбец 'preference_id' не может быть пустым"

Спасибо, что принялипосмотрите на мой вопрос.

1 Ответ

0 голосов
/ 25 июля 2011

Ваш сигнал создает новый объект UserProfile2 в post_save объекта User, основываясь на значении «созданного». Держу пари, что «созданный» - «Истина» каждый раз, когда вызывается этот сигнал, и он пытается создать новый объект UserProfile2 каждый раз, когда вы сохраняете любую информацию об объекте пользователя в admin.

Пользовательскому внешнему ключу UserProfile2 присвоено уникальное значение, в котором вы получаете ошибку дублированного ключа.

Попробуйте изменить код сигнала на:

def create_user_profile(sender, instance, created, **kwargs):
        if created:
            u = UserProfile2.objects.get_or_create(user=instance)

, что должно предотвратить ошибку дублирующего ключа. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...