【问题标题】:Customize Cartridge OrderForm自定义墨盒订单
【发布时间】:2016-04-12 15:47:26
【问题描述】:

我正在使用 Cartridge/Mezzanine 建立一个网上商店。然而,默认情况下,结帐表单 (cartridge.shop.forms.OrderForm) 包含名字和姓氏的字段。我想要一个客户只需提供姓名的表格。此外,我不想使用国家和州/地区的字段。

到目前为止,我已经创建了一个子类 OrderForm 的 CustomOrderForm 并添加了一个“名称”字段。我还尝试使用以下方法覆盖 init 方法:

class CustomOrderForm(OrderForm):
    name = forms.CharField(label=("Navn"))

    def __init__(self, *args, **kwargs):
        super(OrderForm, self).__init__(*args, **kwargs)
        self.fields.pop('billing_detail_country')

除了“名称”字段显示在模板中之外,这对我没有任何好处。但我仍然需要从该字段中获取输入,将其拆分为名字和姓氏,并用它填充相关字段。

我该怎么做?

【问题讨论】:

  • 如果您需要名字/姓氏,您可能需要创建这些单独的字段。如果您只是在一个空格字符上进行拆分,那么当提交的名称中有多个空格时会发生什么?

标签: django forms subclassing mezzanine cartridge


【解决方案1】:

这就是我从订单中删除国家和州/地区字段的方式:-

class CustomOrderForm(OrderForm):
    class Meta:
        model = Order
        fields = ([f.name for f in Order._meta.fields if
                   f.name.startswith("billing_detail") or
                   f.name.startswith("shipping_detail")
                   ] 
                    +
                   ["additional_instructions", "discount_code"])
    def __init__(
        self, request, step, data=None, initial=None, errors=None,
        **kwargs):
        res = super(CustomOrderForm, self).__init__(request, step, data, initial, errors, **kwargs)
        del self.fields["billing_detail_country"]
        del self.fields["shipping_detail_country"]
        return res

因为它是一本字典,所以我使用了 del 方法。希望这是有用的,因为您在这么长时间后才得到答复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多