3

Env: Django 1.5.1 + Django CMS 2.4.1 + Цинния последние + мои пользовательские приложения + пользовательский Django CMS плагинаДжанго 1,5 расширить модель пользователя по умолчанию или заменить его

В принципе я могу продлить по умолчанию Django (1,5 .X) модель пользователя как Django Ribbit Tutorial on NetTuts+

или

заменителя полностью настроенная модель как Django Dev doc или Django2Scoops, например, в пункте: «Работа с пользователем моделью»

Для проверки я решил использовать Subclass AbstractUser Из книги Django2Scoops: «Выберите этот вариант, если вам нравятся поля модели пользователя Django, как они есть, но вам нужны дополнительные поля.»

Но у меня есть следующие ошибки:

notification.noticesetting: «пользователя» определяет связь с моделью «auth.User», которая была выгружена. Обновите отношение к точке в настройках.AUTH_USER_MODEL. cmsplugin_zinnia.latestentriesplugin: 'author' определяет отношение с моделью 'auth.User', которая имеет . Обновите отношение к точке на settings.AUTH_USER_MODEL.

cms.pageuser: 'created_by' определяет отношение с моделью 'auth.User', которая была заменена. Обновите отношение к точке в настройках.AUTH_USER_MODEL. cms.pageusergroup: 'created_by' определяет отношение к модели auth.User, которая была заменена. Обновить отношение к точке в настройках.AUTH_USER_MODEL.

После нескольких часов чтения и теста я нашел

Specifying custom User model (extends AbstractUser) doesn't work

Как сказано в сообщении об ошибке - вам необходимо обновить отношение к точке в settings.AUTH_USER_MODEL. Вторая ошибка («Модель была заменена out ...») является побочным эффектом того факта, что вы напрямую ссылаетесь на модель пользователя. Как только вы измените ссылки ForieignKey, эта третья ошибка исчезнет. Мы сделали все возможное, чтобы обеспечить плавный переход на новую модель пользователя, но он не может быть полностью прозрачным. Разработчики приложений должны будут обновить свои приложения до 1,5 . По сути, приложение Django 1.4 не будет на 100% совместимо с с Django 1.5, если оно содержит жестко закодированную ссылку на внешний ключ для пользователя . Пожалуйста, не могли бы вы дать мне больше примеров?

И Django/Python: Update the relation to point at settings.AUTH_USER_MODEL

в settings_example.py у вас есть AUTH_USER_MODEL = 'users.User. Однако вы используете приложение - menu.bookmark - это имеет отношение к django.contrib.auth.User - вы не можете иметь оба. Установка AUTH_USER_MODEL означает, что вы заменяете встроенную модель Django с вашим собственным.См. http://procrastinatingdev.com/django/using-configurable-user-models-in-django-1-5/ для деталей.

Но я не понимаю, как я могу это решить.

Что мне нужно:

-Пользователи связаны институты класса (один институт -> больше пользователей)

-пользователей или институты могут иметь разное разрешение и увидеть различные Джанго CMS в страницы/плагин.

-Всего больше полей для пользователя.

Является ли подкласс AbstractUser правильной точкой?

Как я могу решить ошибку «поменять»?

я должен создать что-то похожее на OpenTreeMap Code

Не рекомендуется этот код?

Спасибо!

+0

https://github.com/divio/django-cms/issues/1798 Джанго CMS не поддерживает AUTH_USER_MODEL на данный момент. Итак, что я могу сделать? – Daviddd

ответ

5

Существует очень простое решение. Просто нужно зарегистрировать пользовательского пользователя перед импортом 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 
1

Вот мое резюме дальнейшего обсуждения на https://github.com/divio/django-cms/issues/1798.

Есть четыре возможных варианта:

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

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

Надеюсь, что это поможет!

+0

Спасибо, Гонщик Головасти! Как вы, я собираюсь пойти с № 3 и № 4 в долгосрочной перспективе. Документ не был настолько ясен + книга Dajngo2Scoops гласит: «Вариант 3: Подкласс AbstractBaseUser»: AbstractBaseUser - это вариант с голыми костями: пароль, последний логин и активен. 1) Вы недовольны полями, которые предоставляет модель пользователя по умолчанию, например, имя и фамилия. 2) Вы предпочитаете подкласс из чистого голубого сланца, но хотите использовать подход, основанный на использовании стандартного метода AbstractBaseUser для хранения паролей. – Daviddd

Смежные вопросы