Известная штука, что у Django есть статическая (неизменяемая официально поощряемыми путями) модель User
и костыль для дополнительных полей (которые может каким-либо образом использовать приложение) в виде настройки USER_PROFILE
, указывающей на модельку-профиль. В результате использования такого костыля, если не делать дополнительных телодвижений, количество запросов возрастает (пример для данного блога, где каждому комментирующему ставится ссылка на его сайт) на число комментариев (даже не комментировавших, а комментариев!).
Для улучшения ситуации можно применить разные методы, в том числе и load_related, который использовал я. Недостаток заключается в том, что об этом деле надо всегда помнить и везде его применять - неоправданное усложнение кода, имхо.
Потому, после продолжительных колебаний и сомнений, я решил сделать всё радикальнее - удалить всю модель UserProfile
, применив вместо неё monkey patching к стандартной модели:
User.add_to_class('site', models.URLField(verify_exists=False, blank=True))
User.add_to_class('email_new', models.EmailField(blank=True))
User._meta.admin.fields += (
('Byteflow Extensions', {'fields': ('site', 'email_new')}),
)
Конечно, главная проблема здесь - это то, что способ совершенно не стандартный и вряд ли кто-то будет ожидать, что табличка auth_user
будет меняться. Но такой способ настолько выгоднее и удобнее, что я решил наплевать на эти трудности. :-)
И ещё одно - спасибо Амиту, который и показал конкретно, как это сделать. ;-)