Re: [mezzanine-users] Customize model field not possible ?
On 5/11/2016 12:24 AM, David Unric wrote: I'd like replace field type for billing/shipping country, at cartridge.shop.models.Order model. Instead of plain CharField I'd like use CountryField from django_countries. Is that possible with Mezzanine and how ? settings.EXTRA_MODEL_FIELDS does not work, it throws an exception same named field already exists. It sounds logical as it serves for /extending/ models, not replacing. I can't also find a setting to specify alternate class for Order model so it seems subclassing won't be an option. Any better idea then a fuzzy conversion to/from CountryField in custom form ? It's not all that difficult. I've done something similar with a custom OrderForm class in cartridge-braintree (now maintained by Henri) https://github.com/henri-hulski/cartridge_braintree/blob/master/cartridge_braintree/forms.py#L77-L83 So basically: - Create a subclass of OrderForm - Override the country field widgets - and in urls.py, use this Order Form as the one used by the shop (pass form_class=myapp.forms.MyOrderForm, when calling the shop/checkout views) (Old style would be to use SHOP_CHECKOUT_FORM_CLASS but that's not recommended for Django 1.8 onwards) Seeya. Danny. -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to mezzanine-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [mezzanine-users] Customize model field not possible ?
Thanks for the advice. I'll try implement it this way, however it would require more work. For example the original fields can't be blank and a form should fill them with some meaningful values. Also seen several utility functions where fields are queried by names with billing_detail_ and shipping_detail_ prefixes, so they need to be checked to prevent some unexpected malfunction. Regards On Tuesday, May 10, 2016 at 6:42:25 PM UTC+2, Rodrigo Gadea wrote: > > > > On Tue, May 10, 2016 at 11:54 AM, David Unric > wrote: > >> I'd like replace field type for billing/shipping country, at >> cartridge.shop.models.Order model. >> Instead of plain CharField I'd like use CountryField from >> django_countries. >> >> Is that possible with Mezzanine and how ? >> >> settings.EXTRA_MODEL_FIELDS does not work, it throws an exception same >> named field already exists. It sounds logical as it serves for >> *extending* models, not replacing. >> I can't also find a setting to specify alternate class for Order model so >> it seems subclassing won't be an option. >> >> Any better idea then a fuzzy conversion to/from CountryField in custom >> form ? >> > > > One workaround might be save whatever in the old fields (because those are > required) and remove them from displaying (i.e. in the admin) while show > the new field. Although a bit nasty, it might work :) > > I was working on customizing the order process and the way here - from > what I found from other packages, don't know if it is the best - seems to > be adding the fields you need to the model and the form, and removing the > not-needed from the form, the view and other parts. > > For removing from the form, you have to hack on the __init__ of the Order > form (which you can specify), you have to mark as not required and remove > the widgets or provide a workaround. > > In the view, you may end monkey patching the order view - you copy the > source code, modify it and then assign it, i.e. "show_views.checkout_steps > = your_checkout_steps". (This is the most complicated part to me) > > This article shows examples of the techniques; > http://bitofpixels.com/blog/collecting-additional-information-on-a-per-product-basis-in-cartridge/ > > For examples on modifying the Order form look at the payments packages, > i.e.: > > https://github.com/explodes/cartridge-payments/blob/master/payments/multipayments/forms/base.py > > > > HTH, > Rodrigo > > >> -- >> You received this message because you are subscribed to the Google Groups >> "Mezzanine Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mezzanine-use...@googlegroups.com . >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to mezzanine-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [mezzanine-users] Customize model field not possible ?
On Tue, May 10, 2016 at 11:54 AM, David Unric wrote: > I'd like replace field type for billing/shipping country, at > cartridge.shop.models.Order model. > Instead of plain CharField I'd like use CountryField from django_countries. > > Is that possible with Mezzanine and how ? > > settings.EXTRA_MODEL_FIELDS does not work, it throws an exception same > named field already exists. It sounds logical as it serves for *extending* > models, not replacing. > I can't also find a setting to specify alternate class for Order model so > it seems subclassing won't be an option. > > Any better idea then a fuzzy conversion to/from CountryField in custom > form ? > One workaround might be save whatever in the old fields (because those are required) and remove them from displaying (i.e. in the admin) while show the new field. Although a bit nasty, it might work :) I was working on customizing the order process and the way here - from what I found from other packages, don't know if it is the best - seems to be adding the fields you need to the model and the form, and removing the not-needed from the form, the view and other parts. For removing from the form, you have to hack on the __init__ of the Order form (which you can specify), you have to mark as not required and remove the widgets or provide a workaround. In the view, you may end monkey patching the order view - you copy the source code, modify it and then assign it, i.e. "show_views.checkout_steps = your_checkout_steps". (This is the most complicated part to me) This article shows examples of the techniques; http://bitofpixels.com/blog/collecting-additional-information-on-a-per-product-basis-in-cartridge/ For examples on modifying the Order form look at the payments packages, i.e.: https://github.com/explodes/cartridge-payments/blob/master/payments/multipayments/forms/base.py HTH, Rodrigo > -- > You received this message because you are subscribed to the Google Groups > "Mezzanine Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to mezzanine-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to mezzanine-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[mezzanine-users] Customize model field not possible ?
I'd like replace field type for billing/shipping country, at cartridge.shop.models.Order model. Instead of plain CharField I'd like use CountryField from django_countries. Is that possible with Mezzanine and how ? settings.EXTRA_MODEL_FIELDS does not work, it throws an exception same named field already exists. It sounds logical as it serves for *extending* models, not replacing. I can't also find a setting to specify alternate class for Order model so it seems subclassing won't be an option. Any better idea then a fuzzy conversion to/from CountryField in custom form ? -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to mezzanine-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.