2016-04-12 19 views
0

Ich baue einen Webshop mit Cartridge/Mezzanine. Standardmäßig enthält das Kassenformular (cartridge.shop.forms.OrderForm) jedoch Felder für Vor- und Nachnamen. Ich möchte ein Formular, wo der Kunde nur einen Namen angeben muss. Außerdem möchte ich nicht die Felder für Land und Staat/Region verwenden.Customize Cartridge OrderForm

Bis jetzt habe ich eine CustomOrderForm erstellt, die die OrderForm ableitet und ein 'name'-Feld hinzufügt. Ich versuchte auch die init Methode dies außer Kraft zu setzen:

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') 

Dies gilt nicht wirklich tun mir alle gut mit Ausnahme der ‚name'-Feld wird in der Vorlage angezeigt. Aber ich muss immer noch die Eingabe aus diesem Feld übernehmen, sie in Vor- und Nachname aufteilen und die relevanten Felder damit füllen.

Wie mache ich das? Diese

+0

Wenn Sie Vor-/Nachname benötigen, möchten Sie wahrscheinlich diese separaten Felder erstellen. Wenn Sie nur ein Leerzeichen aufteilen, was passiert, wenn mehr als ein Leerzeichen im übermittelten Namen vorhanden ist? –

Antwort

0

ist, wie ich die Felder Land und Region/Regionen von meinem Bestellformular entfernt: -

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 

Da es ein Wörterbuch, das ich die del-Methode verwendet. Hoffe, das ist nützlich, weil Sie nach so langer Zeit beantwortet werden.