Ситуация такова: нам нужен модельный класс, хранящий данные профиля пользователя (его профессия, страна, регион, город и т. Д.).
Согласно официальной документации Django, мы должны сделать что-то вроде следующего:
...
class MyUser( models.User ):
profession = models.CharField( max_length = 64 )
# other fields...
...
Проблема в том, что в результате выполнения команды django-admin.py syncdb в базе данных есть 2 таблицы. Так что если мы хотим найти пользователя по профессии, то наш поиск не так эффективен! Мы могли бы искать, используя только одну таблицу, но мы должны искать, используя two !
Я знаю одно не очень чистое решение, когда в базе данных будет создана только одна таблица после syncdb : вместо использования унаследованных от models.User класс, который мы можем сделать следующим, чтобы расширить существующий Пользователь класс :
# utils.py
class Utils:
class ClassContributor:
@staticmethod
def contribute_fields( object_class, *fields ):
for val in fields:
field_name = val[ 0 ]
field = val[ 1 ]
field.contribute_to_class( object_class, field_name )
# models py
user_contributor = Utils.ClassContributor.contribute_fields(
User,
( 'profession', models.CharField( max_lenght = 64 ) ),
)
В результате получается одна таблица, но мы не видим профессия поле в Django admin
Кто-нибудь знает другое решение проблемы 2-table ? Спасибо.