Wednesday, January 23, 2019

RE: Admin form_url breakout problem

Have you tried setting APPEND_SLASH = False in your settings?

-----Original Message-----
From: django-users@googlegroups.com [mailto:django-users@googlegroups.com] On Behalf Of Mike Dewhirst
Sent: Wednesday, January 23, 2019 3:48 PM
To: django-users@googlegroups.com
Subject: Re: Admin form_url breakout problem

On 24/01/2019 1:08 am, Matthew Pava wrote:
>
> It looks like your second URL is different than the first.
>
> */admin/substance/substance/1442/change/payment*
>
> */admin/substance/substance/1442/change/payment/change/*
>
> If you just want to add a slash, then add it.
>
> */admin/substance/substance/1442/change/payment/*
>
> I'm guessing that Django is interpreting the second URL like so:
>
> */admin/substance/substance/(pk=1442/change/payment)/change/*
>

You are right. It looks like Django expects the last element of the url
to be the id and automatically appends 'change' to a modelAdmin url.
That apparently invokes the 'change' form.

My mission (I think) is to find a way to launch a non-Admin url from
inside the Admin. Or perhaps from a model method.

That is what I meant with the word 'breakout' in the subject line.

Derek suggested a modelAdmin wrapper a few days ago ... "Basically you
can create your own view and use that to display data in a template that
inherits from, for example, the Django admin form template. A bit tricky
first time but then it seems straightforward."

I'm finding it a bit tricky for sure!

If you can see a way ...

Thanks

Mike

> *From:*django-users@googlegroups.com
> [mailto:django-users@googlegroups.com] *On Behalf Of *Mike Dewhirst
> *Sent:* Wednesday, January 23, 2019 12:57 AM
> *To:* Django users
> *Subject:* Admin form_url breakout problem
>
> How can I break out of the Admin to a payment gateway? I've tried
> form_url='billing:payment_view'  in SubstanceAdmin.change_view()
> unsuccessfully.
>
> I can semi-break out of the admin and get the beginning of a payment
> happening with the following ...
>
> SubstanceAdmin.change_form_template = payment.html (which has Stripe
> js and necessary hidden fields)
> or
> ./templates/admin/substance/substance/change_form.html (identical to
> payment.html except it calls block.super at the end to render the rest
> of the admin page)
>
> SubstanceAdmin.change_view() which collects the contextual data
> required for either template
>
> IngredientsInline.form (inherits  admin.StackedInline.form) for all
> the hidden fields for each ingredient.
>
> With all that, if an ingredient hasn't been paid for, the
> billing.Subscription record won't have a Stripe token so the Admin
> will launch the payment page. On entering credit card detail and
> pressing the button, Stripe happily takes the money and issues a
> token. BUT the Admin then barfs with ...
>
>
>
> RuntimeError at /admin/substance/substance/1442/change/payment
>
> You called this URL via POST, but the URL doesn't end in a slash and
> you have APPEND_SLASH set. Django can't redirect to the slash URL
> while maintaining POST data. Change your form to point to
> localhost:8000/admin/substance/substance/1442/change/payment/ (note
> the trailing slash), or set APPEND_SLASH=False in your Django settings.
>
>
> ... If I add a slash in the browser address bar and press Enter the
> next problem emerges ...
>
>
>
> ValueError at /admin/substance/substance/1442/change/payment/change/
>
> invalid literal for int() with base 10: '1442/change/payment'
>
>
> ... which tells me the Admin is hoping for
> /admin/substance/substance/1442/
>
> I don't know where to go now.
>
> My preference would be to leave the Admin somehow and handle the
> payment externally with my billing.payment_view() and
> billing.success_view() then at the end find a way to give that
> hoped-for url to the server and expect the substance to come up
> normally in the admin.
>
> Any advice will be greatly appreciated. Happy to show any code you
> might want to see.
>
> Many thanks
>
> Mike
>
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-users+unsubscribe@googlegroups.com
> <mailto:django-users+unsubscribe@googlegroups.com>.
> To post to this group, send email to django-users@googlegroups.com
> <mailto:django-users@googlegroups.com>.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/f8061a7d-27b5-c929-c364-d8870829ad3e%40dewhirst.com.au
> <https://groups.google.com/d/msgid/django-users/f8061a7d-27b5-c929-c364-d8870829ad3e%40dewhirst.com.au?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-users+unsubscribe@googlegroups.com
> <mailto:django-users+unsubscribe@googlegroups.com>.
> To post to this group, send email to django-users@googlegroups.com
> <mailto:django-users@googlegroups.com>.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/d0ae4053cd254b2bbc982cff3637d0a6%40iss2.ISS.LOCAL
> <https://groups.google.com/d/msgid/django-users/d0ae4053cd254b2bbc982cff3637d0a6%40iss2.ISS.LOCAL?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/1a6d5511-1273-1420-4481-959813a13654%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/7ba88883f69f4a5e826a7a7567cf6ee7%40iss2.ISS.LOCAL.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment