I'm obviously at fault but I'm not smart enough to figure it out. Any help is appreciated.

The mechanism below exhibits no errors at the Stripe end. Stripe returns the necessary payment token. I have tried brutally stripping of the "/change/payment" and while it silences the error, the form just re-shows itself.

<aside> I see a similar problem in 32-bit iOS Safari which doesn't seem to like the svg tick symbol displayed in the Admin change screen success message. The only symptom is the tick doesn't appear and the user is none the wiser. But it generates an error email Field 'id' expected a number but got '55/img/icon-yes.svg' </aside>


 ValueError at /admin/chemical/chemical/20/change/payment/change/

Field 'id' expected a number but got '20/change/payment'.

Request Method:         GET
Request URL: http://localhost:8088/admin/chemical/chemical/20/change/payment/change/
Django Version:         3.2.13
Exception Type:         ValueError
Exception Value:        

Field 'id' expected a number but got '20/change/payment'.

Exception Location: D:\Users\mike\envs\xxai\lib\site-packages\django\db\models\fields\__init__.py, line 1825, in get_prep_value
Python Executable:      D:\Users\mike\envs\xxai\Scripts\python.exe
Python Version:         3.8.3


Here is the ChemicalAdmin.change_view(). I filled in the docstring a year ago when debugging previously.

    def change_view(self, request, object_id, form_url="", extra_context=None):
        """
        self = ChemicalAdmin
        object_id = chemical
        form_url is passed through to self.render_change_form() via
        self.get_preserved_filters(request) and then added to context
        extra_context = dict of apps, models, admin_urls and permissions. Ensure         self.change_form_template = None so next time it doesn't use payment.html
        """
        extra_context = extra_context or {}
        self.change_form_template = None
        chemical = Chemical.objects.get(id=object_id)
        intro = chemical.get_introduction()
        if intro and not chemical.token:
            if intro.category in CHARGE:
                self.change_form_template = "payment.html"
                context = collect_gateway_context(chemical)
extra_context.update(self.admin_site.each_context(request))
                extra_context.update(context)
                self.admin_site.admin_view(
                    payment_view(request, chemical, context=extra_context)
                )
        return super().change_view(request, object_id, form_url, extra_context)

And the url config ...

    re_path(r"invoice/(?P<pk>\d+)/$", billing_views.invoice_view, name="invoice_view"),
    re_path(r"payment/$", billing_views.payment_view, name="payment_view"),
    re_path(r"success/$", billing_views.success_view, name="success_view"),

And the payment.html form ...

    <form action="payment" method="POST">
        {% csrf_token %}
        {% if form.errors or form.non_field_errors %}
            {{ form.errors }}
            {{ form.non_field_errors }}
        {% endif %}
        {% for field in form %}
            {% if field.name == "chemical_id" %}
                <input type="hidden" name="chemical_id" id="id_chemical_id" value="{{ chemical.id }}" />
            {% else %}
                {{ field }}
            {% endif %}
        {% endfor %}
        <script
          src="https://checkout.stripe.com/checkout.js"; class="stripe-button"
          data-key="{{ data_key }}"
          data-amount="{{ data_amount }}"
          data-name="{{ data_name }}"
          data-description="{{ data_description }}"
          data-image="{{ data_image }}"
          data-locale="{{ data_locale }}"
          data-currency="{{ data_currency | lower }}"
          data-zip-code="true"
          data-panel-label="Pay">
        </script>
    </form>

Thanks

Mike



--
Signed email is an absolute defence against phishing. This email has
been signed with my private key. If you import my public key you can
automatically decrypt my signature and be sure it came from me. Just
ask and I'll send it to you. Your email software can handle signing.

--
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/230a7a65-08f2-f990-131f-7879c4fbb05a%40dewhirst.com.au.

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to