Вставить новое поле в конкретном представлении администратора?

Я пытаюсь расширить модель Django по умолчанию новым полем. В localsite/models.py у меня есть следующий код:

from django.db import models
from django.utils.translation import ugettext_lazy as _
from satchmo_store.contact.models import Organization

class OrganizationExtra(models.Model):
    organization = models.OneToOneField(Organization,
            verbose_name=_('Organization'), primary_key=True )
    vat_number   = models.CharField(_('VAT'), max_length=12)

Последовал с пробегом ./manage.py syncdb который создал новую таблицу для модели выше. Все идет нормально.

Сейчас я пытаюсь добавить это новое поле в связанных Organization посмотреть в интерфейсе администратора. Следующий код регистрирует новое меню, однако новое vat_number поле не отображается ввиду связанных Organization модель.

from django.contrib import admin
from localsite.models import ProductResource, OrganizationExtra

admin.site.register(OrganizationExtra)

Оригинал Organization модель зарегистрирована с

from satchmo_store.contact.models import Organization
from django.contrib import admin

class OrganizationOptions(admin.ModelAdmin):
    list_filter = ['type', 'role']
    list_display = ['name', 'type', 'role']

admin.site.register(Organization, OrganizationOptions)

Любая идея, как вставить мое новое поле, не касаясь оригинальных источников Satchmo?

1 ответ

Решение

Смотрите документы как обычно.

Одним из возможных способов является создание нового MyOrganization происходит от Organization и зарегистрируйте его вместо satchmo one

Ваш models.py

from django.db import models
from django.utils.translation import ugettext_lazy as _
from satchmo_store.contact.models import Organization

class MyOrganization(Organization):
    vat_number   = models.CharField(_('VAT'), max_length=12)

Ваш admin.py

from django.contrib import admin
from localsite.models import MyOrganization
from satchmo_store.contact.models import Organization
from satchmo_store.contact.admin import OrganizationOptions

admin.site.unregister(Organization)
admin.site.register(MyOrganization, OrganizationOptions)

Другое возможное решение (если вы хотите придерживаться OrganizationExtra) создать собственную форму для Organization для интерфейса администратора и снова зарегистрировать модель. По мне кажется, как более шаблонный и результат будет таким же.

Примечание: в обоих случаях структура БД будет одинаковой, то есть будет создана дополнительная таблица.

Другие вопросы по тегам