Обновление Django до версии 1.5 с помощью Django-CMS — проблема с пользовательской моделью

Я только что переместил сайт с Django-CMS 2.3.5 на 2.4.1 (с help от Stackoverflow) в Django 1.4.

Сейчас я обновляюсь до Django 1.5, что сложно только потому, что мне нужно обновить старый отдельный профиль пользователя до новой пользовательской модели пользователя. Я следовал превосходным инструкциям здесь, а также заменил все ссылки на User на settings.AUTH_USER_MODEL.

К сожалению, модели Django-CMS, по-видимому, по-прежнему ссылаются на User: когда я набираю manage.py runserver, я получаю эту ошибку:

CommandError: One or more models did not validate:
cms.pagemoderatorstate: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.globalpagepermission: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pagepermission: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageuser: 'user_ptr' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageuser: 'created_by' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageusergroup: 'created_by' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.

Как я могу заставить Django-CMS использовать новую пользовательскую модель?

Спасибо!


person Racing Tadpole    schedule 17.05.2013    source источник
comment
Я не видел этого вопроса. Я создал аналогичный: stackoverflow.com/questions/16605453/   -  person Daviddd    schedule 17.05.2013
comment
Из github.com/divio/django-cms/issues/1798 django CMS в настоящее время не поддерживает AUTH_USER_MODEL. Следовательно, что мы можем сделать?   -  person Daviddd    schedule 17.05.2013


Ответы (2)


Есть очень простое решение. Просто нужно зарегистрировать своего пользователя перед импортом CMSPlugin. Пример:

from django.db import models
from django.contrib.auth import models as auth_models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
  telephone = models.CharField(max_length=100)
  email = models.CharField(max_length=100)

auth_models.User = User

from cms.models import CMSPlugin
person Jelena Kutalovskaja    schedule 02.07.2013
comment
Спасибо! Сейчас я пошел другим путем, но приятно знать, что это так просто. - person Racing Tadpole; 03.07.2013

Для тех, у кого есть этот вопрос, вот мое краткое изложение того, что я узнал из https://github.com/divio/django-cms/issues/1798.

Возможны четыре варианта:

  1. Если вам нужно, чтобы ваша настраиваемая пользовательская модель имела имя, отличное от User, вам придется подождать.
  2. Вы можете назвать пользовательскую модель пользователя User, хотя, когда я пытался это сделать, я получил ошибки о конфликтах со связанными полями m2m. По приведенной выше ссылке есть некоторые дополнительные сведения, которые могут помочь решить эту проблему.
  3. Django 1.5 по-прежнему позволяет вам использовать профили пользователей. Поэтому, если вы согласны с использованием устаревшей функции, вы все равно можете использовать Django-CMS 2.4 и Django 1.5 с профилями пользователей вместо пользовательской модели пользователя. (Я неправильно прочитал здесь документы Django и подумал, что профили пользователей не поддерживаются в Django 1.5.)
  4. Часто можно обойтись без профиля пользователя или пользовательской модели пользователя — их лучше всего использовать для добавления данных специально для аутентификации пользователя. Вместо этого вы можете использовать другую модель с однозначной связью с пользователем и использовать обратную связь для доступа к ней.

В моем случае я собираюсь использовать № 3 в краткосрочной перспективе и № 4 в долгосрочной перспективе.

person Racing Tadpole    schedule 23.05.2013
comment
Мне не нужно было вносить какие-либо изменения в настройки профиля пользователя для обновления с Django 1.4 до 1.5. На самом деле единственное изменение в файле settings.py, которое я сделал, — это добавление параметра ALLOWED_HOSTS. (Обновление Django-CMS с 2.3 до 2.4 требует еще нескольких изменений, но опять же, ничего общего с профилями пользователей.) - person Racing Tadpole; 03.06.2013