Thank you all for your attention. Kept me going.
The fix is to initialise the self.change_form_template to None *every*
time ModelAdmin.change_form() is called. If it is None the
ModelAdmin.render_change_form() method will dynamically create the model
instance change form. Otherwise it uses the form I give it. My problem
was it remembered that instead of doing its own thing when I had
finished with it.
I reckon it was designed to swap out the default form and completely
replace it forever. Thank heavens for open source.
Here is the only change to my code ...
def change_view(self, request, object_id, form_url='',
extra_context=None): """ self = SubstanceAdmin request = wsgi request
object object_id = substance form_url = no idea! extra_context = dict of
apps, models, admin_urls and permissions """ self.change_form_template =
None ############## this works ############# ingredients =
Substance_Ingredients.objects.filter(substance_id=object_id)
subscription = None for sm2mi in ingredients: payable, fee_type =
sm2mi.fee_payable() # eg., True, PAID_DATA if payable: subscription =
billing_subscribe(sm2mi, fee_type) if subscription: # we need to collect
money for the owner self.change_form_template = 'payment.html' context =
billing_collect_context( sm2mi, subscription, ) # get everything into
the payment_view context if not extra_context: extra_context = dict()
extra_context.update(self.admin_site.each_context(request))
extra_context.update(context) self.admin_site.admin_view( # call the
Stripe mechanism billing_payment_view( request, sm2mi, subscription,
context=extra_context, ) ) # only one sm2mi at a time break return
super(SubstanceAdmin, self).change_view( request, object_id, form_url,
extra_context )
I reckon the Admin can do anything. It just takes some head scratching
:)
Mike
On 23/02/2019 6:58 pm, Mike Dewhirst wrote:
> (Resend with urls which I previously omitted)
>
> In a 'Substance' app I have a Stripe payment facility working from
> within the Admin. The problem is it spoils admin_urls so the user
> cannot get back to the Substance Admin. When the Stripe work is done,
> how do I re-initialise the admin urls?
>
> I want to display a success page with a link back to the substance
> page. I can provide exactly the correct url but all it shows is an
> admin page with no content. The correct url is
> /admin/substance/substance/<pk>/ and that works only if the Stripe
> mechanism has not been called since the dev server reloaded itself.
>
> I probably have an incorrect diagnosis here. The problem is most
> likely my misunderstanding of how to use the Admin properly. Any help
> will be very much appreciated.
>
> Thanks
>
> Mike
>
> The process uses ModelAdmin.change_view()[1] to call my
> billing_payment_view()[2] which uses PaymentForm[3] and
> payment.html[4] template to pass the necessary hidden vars.
>
> When the view executes (depending on whether payment is required) it
> pops up a (Stripe js) credit card collection form with a [Pay] button
> and that submits the detail to the Stripe API which in turn generates
> a token if successful or an error message and re-executes the
> billing_payment_view with request.POST including that detail plus all
> the hidden fields in the form. The view goes on to process the detail,
> generate a receipt, send an email to the payer and launch the
> billing_success_view()[5] and success.html[6] template.
>
--
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/6f36e2b8-7ef0-c498-88c7-804d1e44a263%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment