2010-09-09 4 views
1

Я использую Django PayPal. PayPal имеет номер list of options, который вы можете передать на своей кнопке. Я пытаюсь добавить некоторые из них к моему paypal_dictDjango PayPal & Дополнительные параметры

paypal_dict = { 
    # ... 

    # preopulate paypal checkout page 
    "email": invoice.user.email, 
    "first_name": invoice.user.first_name, 
    "last_name": invoice.user.last_name, 
    "address1": invoice.user.address.street, 
    "city": invoice.user.address.city, 
    "country": invoice.user.address.get_country_display, 
    "address_country_code": invoice.user.address.country 
} 

form = PayPalPaymentsForm(initial=paypal_dict) 

Но когда я проверить форму, эти поля никогда не добавляются. Как я могу их добавить?

+2

Hi Mark - только быстрый хедз-ап, то jonboxall вилка не самые на сегодняшний день Django-Paypal - dcramer один впереди, и основная развилка для отслеживания. См. Http://github.com/dcramer/django-paypal/network –

+0

А .. Я знал, что есть две основные вилки, но я не мог вспомнить, что было новее. Кто бы ни появился первым в Google, я предположил, что он лучший: p В любом случае .. Мне нужно будет проверить, какой из них я использую, но ... Я думаю, что это все еще проблема в версии dcramer, isn Не так ли? – mpen

+0

Я действительно не знаю ответа, поскольку я не использовал django-paypal, но ... В документации, к которой вы связались, в вашем вопросе нет переменной 'email', просто' receiver_email' и 'payer_email'. То же самое для некоторых других опций, которые вы указали ... –

ответ

1

я взломал его:

def __init__(self, button_type="buy", extra_options={}, *args, **kwargs): 
    super(PayPalPaymentsForm, self).__init__(*args, **kwargs) 
    self.extra_options = extra_options 
    self.button_type = button_type 

def render(self): 
    extra_fields = u''.join(['<input type="hidden" name="%s" value="%s" />' % (escape(name), escape(value)) for name, value in self.extra_options.iteritems()])   
    return mark_safe(u"""<form action="%s" method="post"> 
%s 
%s 
<input type="image" src="%s" border="0" name="submit" alt="Buy it Now" /> 
</form>""" % (POSTBACK_ENDPOINT, self.as_p(), extra_fields, self.get_image())) 


def sandbox(self): 
    extra_fields = u''.join(['<input type="hidden" name="%s" value="%s" />' % (escape(name), escape(value)) for name, value in self.extra_options.iteritems()]) 
    return mark_safe(u"""<form action="%s" method="post"> 
%s 
%s 
<input type="image" src="%s" border="0" name="submit" alt="Buy it Now" /> 
</form>""" % (SANDBOX_POSTBACK_ENDPOINT, self.as_p(), extra_fields, self.get_image())) 
+1

Почему бы не внести свой вклад в django-paypal на github? – kakarukeys

1

я нашел гораздо более чистый раствор без изменения оригинального кода, благодаря множественному наследованию Python.

forms.py

from django import forms 
from paypal.standard.widgets import ValueHiddenInput 
from paypal.standard.forms import PayPalEncryptedPaymentsForm 


class PayPalAddressFormMixin(forms.Form): 

    address1 = forms.CharField(widget=ValueHiddenInput()) 
    address2 = forms.CharField(widget=ValueHiddenInput()) 
    city = forms.CharField(widget=ValueHiddenInput()) 
    country = forms.CharField(widget=ValueHiddenInput()) 
    zip = forms.CharField(widget=ValueHiddenInput()) 

    email = forms.CharField(widget=ValueHiddenInput()) 
    first_name = forms.CharField(widget=ValueHiddenInput()) 
    last_name = forms.CharField(widget=ValueHiddenInput()) 


class PayPalEncryptedPaymentsAddressForm(PayPalEncryptedPaymentsForm, PayPalAddressFormMixin): 
    pass 

в views.py вы можете задать начальные значения, как обычно

paypal_dict = { 
    # ... 

    # preopulate paypal checkout page 
    "email": invoice.user.email, 
    "first_name": invoice.user.first_name, 
    "last_name": invoice.user.last_name, 
    "address1": invoice.user.address.street, 
    "city": invoice.user.address.city, 
    "country": invoice.user.address.get_country_display, 
    "address_country_code": invoice.user.address.country 
} 

form = PayPalEncryptedPaymentsAddressForm(initial=paypal_dict) 
Смежные вопросы