自定义Cartridge OrderForm

时间:2016-04-12 15:47:26

标签: django forms subclassing mezzanine cartridge

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

到目前为止,我已经创建了一个CustomOrderForm,它继承了OrderForm并添加了一个名称' -field。我还尝试使用以下方法覆盖 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')

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

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方法。希望所以这很有用,因为你经过这么长时间的回答。