自定义django oscar应用程序(地址)并在运行迁移时添加名为“ area”的新字段后,它为我指定了UserAddress的未知字段(区域)
我使用了命令
./manage.py oscar_fork_app address myappsfolder/
在创建文件夹和其中的__init__.py
文件之后
然后我开始像这样自定义应用程序:
#myappsfolder/address/models.py
from django.db import models
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from oscar.apps.address.abstract_models import AbstractAddress
class Address(AbstractAddress):
area = models.CharField(_("Area"), max_length=120,
choices=settings.AREA_CHOICES, blank=True)
from oscar.apps.address.models import *
#myappsfolder/address/forms.py
from oscar.apps.address import forms as base_forms
class UserAddressForm(base_forms.UserAddressForm):
class Meta(base_forms.UserAddressForm.Meta):
fields = ['area']
我没有触摸命令admin.py
创建的config.py
,__init__.py
和./manage.py oscar_fork_app address myappsfolder/
我在__init__.py
中创建的myappsfolder
也为空,是否应该向这些文件中添加内容?
我应该怎么做才能定制这个程序?或任何其他应用程序?
如果我在oscar/apps/address/abstract_models.py
中编辑模型,那么它仅适用于本地主机,并且表格中的错误消失了,这意味着django仍从oscar/apps
而不是myappsfolder
读取模型。
答案 0 :(得分:2)
您不能以这种方式覆盖AbstractAddress
,因为更改不会传播到其他模型,例如直接继承UserAddress
的其他模型,例如AbstractAddress
。相反,您需要覆盖要更改的特定地址模型。因此,如果您想更改UserAddress
,请覆盖该特定模型:
from oscar.apps.address.abstract_models import AbstractUserAddress
class UserAddress(AbstractUserAddress):
area = models.CharField(_("Area"), max_length=120, choices=settings.AREA_CHOICES, blank=True)
...,之后您对UserAddressForm
所做的更改应该可以使用。
如果您还需要覆盖ShippingAddress
,则还必须派生shipping
应用并在其中执行相同的操作,因为那是模型所在的地方。