Re: [mezzanine-users] Customize model field not possible ?

2016-05-10 Thread Danny

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 ?

2016-05-10 Thread David Unric
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 ?

2016-05-10 Thread Rodrigo Gadea
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 ?

2016-05-10 Thread David Unric
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.