在特定管理视图中插入新字段?

时间:2013-12-01 14:03:57

标签: python django django-models satchmo

我正在尝试使用新字段扩展默认的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 个答案:

答案 0 :(得分:1)

照常查看docs

一种可能的方法是创建从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的自定义表单,并再次重新注册模型。在我看来,更多的样板和结果将是相同的。

NB:在两种情况下,DB结构都是相同的,即会创建额外的表。