2016-04-12 26 views
0

Kartuş/Ara Katman kullanarak bir web mağazası yapıyorum. Ancak, varsayılan olarak, ödeme formu (cartridge.shop.forms.OrderForm) hem ilk adlar hem de soyadı için alanlar içerir. Müşterinin sadece bir isim vermesi gereken bir form istiyorum. Ayrıca, Ülke ve Eyalet/Bölge alanlarını kullanmak istemiyorum.Kartuş Özelleştirme Özelliği

Şimdiye kadar, OrderForm alt sınıflarını içeren ve bir 'name' alanı ekleyen bir CustomOrderForm oluşturdum. şablonda gösterilir 'name' saha dışında

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

Bu gerçekten beni bir faydası olmaz: Ben de bu kullanarak init yöntemini geçersiz çalıştı. Fakat yine de bu alandaki girdiyi almam, ilk ad ve soyadı olarak bölmem ve ilgili alanları onunla doldurmam gerekiyor.

Bunu nasıl yaparım?

+0

Ad/soyadına ihtiyacınız varsa, muhtemelen bu ayrı alanları yapmak isteyebilirsiniz. Sadece bir boşluk karakterine ayrılıyorsanız, gönderilen adda birden fazla alan olduğunda ne olur? –

cevap

0

Bu benim Sipariş Formu alanlar Ülke ve Devlet/Bölgeler kaldırıldı nasıl: - ben del yöntemi kullanmış bir sözlük var

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 

beri. Umarım bu kadar uzun bir süre sonra yanıtlandığınız için yararlıdır.