如何自定义奥斯卡地址表单字段?

How to customize oscar address form fields?

自定义 django oscar 应用程序(地址)并添加一个名为 'area' 的新字段后,当我 运行 迁移时,它给了我为 UserAddress[=23= 指定的未知字段(区域) ]

我用了命令 ./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']

我没有触及命令 ./manage.py oscar_fork_app address myappsfolder/ 创建的 admin.pyconfig.py__init__.py 我在 myappsfolder 中创建的 __init__.py 也是空的,我应该向这些文件添加一些内容吗?

我应该如何自定义此应用程序?或任何其他应用程序? 如果我在 oscar/apps/address/abstract_models.py 中编辑模型,它只适用于本地主机并且表单中的错误消失,这意味着 django 仍在从 oscar/apps 而不是 myappsfolder.[=23= 读取模型]

您不能以这种方式覆盖 AbstractAddress,因为更改不会传播到其他模型,例如直接子类 AbstractAddressUserAddress。相反,您需要覆盖要更改的特定地址模型。因此,如果您想更改 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 应用程序并在那里做同样的事情,因为那是模型所在的地方。