Настроить картридж OrderForm

Я строю интернет-магазин, используя Картридж / Мезонин. Однако по умолчанию форма оформления заказа (картридж.shop.forms.OrderForm) содержит поля для имен и фамилий. Я хочу форму, где клиент просто должен предоставить имя. Кроме того, я не хочу использовать поля для страны и штата / региона.

До сих пор я создал CustomOrderForm, который подклассов OrderForm и добавил поле 'name'. Я также попытался переопределить метод 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')

Это на самом деле не приносит мне никакой пользы, за исключением того, что поле 'name' отображается в шаблоне. Но мне все еще нужно взять входные данные из этого поля, разделить его на имя и фамилию и заполнить соответствующие поля им.

Как мне это сделать?

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. Надеюсь, что это полезно, так как вам отвечают после столь долгого времени.

Другие вопросы по тегам