我正在尝试使用新字段扩展默认的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源的情况下插入新字段吗?
答案 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结构都是相同的,即会创建额外的表。