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

时间:2019-02-05 23:21:36

标签: python django django-oscar

自定义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读取模型。

1 个答案:

答案 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应用并在其中执行相同的操作,因为那是模型所在的地方。