#google-app-engine #django-nonrel
#google-app-engine #django-nonrel
Вопрос:
Я пытаюсь расширить пользовательские модели с помощью своей пользовательской модели, унаследовав от нее вот так:
class Profile(User):
...
Я хотел бы добавить свои пользовательские поля в пользовательскую модель, но django nonrel завершается с ошибкой:
DatabaseError: Multi-table inheritance is not supported by non-relational DBs.
Итак, как я могу решить эту проблему? Мне определенно нужны мои пользовательские поля в пользовательской модели.
Ответ №1:
Вместо переопределения пользовательской модели вам следует создать другой класс, содержащий дополнительные поля, и привязать его к пользовательской модели отношением 1 к 1.
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
nickname = models.CharField(max_length=50)
...
...
Ответ №2:
Вы не можете сделать что-то подобное в google-app-engine. Если вы хотите иметь взаимосвязь в своей модели. Вы должны денормализовать свою модель таким образом, чтобы то же самое можно было достичь способом appengine.Чтобы узнать больше о моделировании в appengine. Вы можете перейти по следующим ссылкам.
Комментарии:
1. Хорошо, спасибо, но ваш ответ связан с простым GAE-способом, а не с django-nonrel
Ответ №3:
Я хотел, чтобы объект request.user был обычным пользовательским объектом, но с добавленными полями. Принятый ответ этого не допускает, поскольку в UserProfile есть участник «user» вместо того, чтобы быть пользователем.
В этой статье объясняется, как вместо этого наследовать от пользователя.
Краткие шаги:
- Сделать CustomUser наследуемым от User
- Настройте пользовательский сервер аутентификации для возврата CustomUser
Еще не пробовал.
Комментарии:
1. В django-nonrel вы можете наследовать модели только из абстрактных классов (это потому, что при наследовании модели в Django создаются две таблицы, которые соединяются с помощью объединений, чего вы, очевидно, не можете сделать в django-nonrel)