#django #django-models
#django #django-модели
Вопрос:
существует множество примеров, рассказывающих вам, как расширить пользовательскую модель, НО я не могу найти реальный, полный и документированный пример того, как расширить существующую модель без необходимости следовать «шаблону профиля пользователя» (и, честно говоря, мне интересно, почему).
Короче говоря, мой вариант использования следующий: мне нужно расширить модель продукта django-lfs.
В LFS регистрируется следующим образом (в lfs.catalog.admin):
from django.contrib import admin
[...]
from lfs.catalog.models import Product
[...]
class ProductAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("name", )}
admin.site.register(Product, ProductAdmin)
[...]
Я попытался зарегистрировать свою (которая подклассирует ее), но я получил:
django/contrib/admin/sites.py «, строка 78, в регистре raise AlreadyRegistered(‘Модель %s уже зарегистрирована’ % model.name)
Итак, кто-то предложил мне отменить регистрацию этого объекта и зарегистрировать свой.
Я сделал это следующим образом:
from lfs.catalog.models import Product
from lfs.catalog.admin import ProductAdmin
admin.site.unregister(Product)
from lfs_product_highlights.catalog.models import Product
admin.site.register(Product,ProductAdmin)
На этот раз ошибок нет, НО и изменений нет, мои пользовательские поля нигде не видны.
Есть какие-нибудь подсказки?
Комментарии:
1. Добавляет ли ваш подкласс model новые поля базы данных? Если нет, вы могли бы взглянуть на модели прокси: lincolnloop.com/blog/2010/dec/16 /…
2. да, я делаю это для добавления полей
Ответ №1:
Причина, по которой это сложно, заключается в несоответствии объектно-реляционного импеданса (люблю эту фразу). Объекты и классы не идеально отображаются на реляционные базы данных: ORM, подобные попытке Django сгладить границы, но есть некоторые места, где различия просто слишком велики. Наследование является одним из них: просто нет способа заставить одну таблицу «наследовать» от другой, поэтому ее приходится моделировать с помощью внешних ключей или тому подобного.
В любом случае, что касается вашей реальной проблемы, я действительно не вижу, что происходит, но одним из возможных способов исправить это было бы также создать подкласс ProductAdmin и специально установить model
атрибут для вашей подклассовой модели.