-
Здравствуйте!
Я начал использовать django-paypal метод оплаты Pro, вот кусок кода как это выглядит во views.py:
Сама форма унаследована от PaymentForm:def check_out(request):
if request.user.is_authenticated:
user = AccountUser.objects.get(username=request.user)
...
if user.payment == 2:
item = {'amt': unit_price,
'cancelurl': "http://%s/cancel/" % current_site,
'returnurl': "http://%s/success/" % current_site}
kwargs = {'item':item,
'payment_template': 'cart/paypal_payment.html',
'payment_form_cls': SimplePaymentForm,
'success_url': '/success',
}
ppp = PayPalPro(**kwargs)
Вопрос в следующем, как мне не меняя код django-paypal передать в переопределённый __init__ значение текущего request.user, чтоб потом через initial заполнять поля формы SimplePaymentForm значение которых уже есть в User? Или есть другой способ?from paypal.pro.forms import PaymentForm
class SimplePaymentForm(PaymentForm):
firstname = forms.CharField(max_length=255, widget=forms.HiddenInput())
lastname = forms.CharField(max_length=255, widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(SimplePaymentForm, self).__init__(*args, **kwargs) -
class SimplePaymentForm(PaymentForm):
...
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(SimplePaymentForm, self).__init__(*args, **kwargs)
def check_out(request):
def form_factory(*args, **kwargs):
kwargs['user'] = request.user
return SimplePaymentForm(*args, **kwargs)
...
kwargs = {
'payment_form_cls': form_factory,
... -
Почему то возвращает 'pop(): dictionary is empty'...
-
Ой, вру! Спасибо, так работает.
-
Возможно так будет проще:
from django.utils.functional import curry
class SimplePaymentForm(PaymentForm):
...
def __init__(self, user, *args, **kwargs):
super(SimplePaymentForm, self).__init__(*args, **kwargs)
self.user = user
def check_out(request):
form_factory = curry(SimplePaymentForm, request.user)
...
kwargs = {
'payment_form_cls': form_factory,
... -
Ага, спасибо вам большое!
А можно ли таким способом передать в шаблон переменную? Или есть другие способы? -
А можно ли таким способом передать в шаблон переменную?Не очень понял вопрос, опишите задачу подробнее, пожалуйста.
-
Например в функции check_out я получил unit_price = 35.67, как мне эту переменную unit_price передать в шаблон и вывести {{ unit_price }} при условии что доступа к render я не имею. Или, если сказать точнее, код django-paypal трогать не хочется.
-
Да, вопрос наверно некорректен, надо искать другой способ передать переменную в шаблон.
-
Беглое разглядывание кода django-paypal показывает, что PayPalPro в качестве аргумента принимает context.
kwargs = {
'context': {'unit_price': 35.67} # Передавайте в шаблон что надо
'item':item,
'payment_template': 'cart/paypal_payment.html',
'payment_form_cls': SimplePaymentForm,
'success_url': '/success',
}
ppp = PayPalPro(**kwargs) -
Ох, проглядел :). Спасибо вам за помощь!
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
