2010-09-09 6 views
1

J'utilise Django PayPal. PayPal a un list of options vous pouvez transmettre votre bouton. Je suis en train d'ajouter certains d'entre eux à mon paypal_dictDjango PayPal & Options supplémentaires

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) 

Mais quand je visite la forme, ces champs ne sont jamais ajoutés. Comment puis-je les faire ajouter?

+2

Salut Mark - juste un rapide heads-up, la fourche jonboxall est pas les plus à ce jour Django-Paypal - le dcramer est en avance, et la fourche principale à suivre. Voir http://github.com/dcramer/django-paypal/network –

+0

Ah .. Je savais qu'il y avait deux fourchettes principales, mais je ne pouvais pas me rappeler laquelle était la plus récente. Quoi qu'il en soit apparu en premier dans Google, je pensais que c'était le meilleur: p De toute façon ... Je vais devoir vérifier pour voir lequel je suis en train d'utiliser, mais ... Je pense que c'est toujours un problème dans la version dcramer, isn n'est-ce pas? – mpen

+0

Je ne connais pas vraiment la réponse, car je n'ai pas utilisé django-paypal, mais ... Dans la documentation que vous avez liée à votre question, il n'y a pas de variable 'email', seulement' receiver_email' et 'pay_email'. La même chose pour d'autres options que vous avez énumérées ... –

Répondre

1

Je piraté dans:

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

pourquoi ne pas contribuer à django-paypal sur github? – kakarukeys

1

J'ai trouvé une solution beaucoup plus propre sans modifier grâce de code d'origine à l'héritage multiple 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 

dans views.py vous pouvez définir des valeurs initiales comme d'habitude

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)