【问题标题】:How to customize oscar address form fields?如何自定义奥斯卡地址表单字段?
【发布时间】:2019-02-05 23:21:35
【问题描述】:

在自定义 django oscar 应用程序(地址)并在我运行 migrate 时添加一个名为“区域”的新字段后,它给了我为 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.pyconfig.py__init__.py 没有碰过由命令 ./manage.py oscar_fork_app address myappsfolder/ 创建的 我在myappsfolder 中创建的__init__.py 也是空的,我应该在这些文件中添加一些内容吗?

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

【问题讨论】:

    标签: python django django-oscar


    【解决方案1】:

    您不能以这种方式覆盖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 应用并在那里做同样的事情,因为那是模型所在的地方。

    【讨论】:

    • 感谢您的回复,这对我有用,并且新字段出现在表单上,​​但是在我选择区域并保存后,在地址簿中该区域不存在,也在仪表板上不存在,但是当我编辑地址时我可以编辑区域,我怎样才能让它出现在客户帐户和仪表板上?
    • 您需要覆盖base_fieldsactive_address_fields() 以包含您添加的字段。请注意,更改 base_fields 将更改用于检查重复项等的地址哈希。
    • @solarissmoke 你能帮帮我吗?如何在地址表单中隐藏一些不必要的字段?
    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2016-04-22
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多