-
Здравствуйте!
Я начал использовать django-paypal метод оплаты Pro, вот кусок кода как это выглядит во views.py: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)
Сама форма унаследована от PaymentForm: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)
Вопрос в следующем, как мне не меняя код django-paypal передать в переопределённый __init__ значение текущего request.user, чтоб потом через initial заполнять поля формы SimplePaymentForm значение которых уже есть в User? Или есть другой способ? -
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) -
Ох, проглядел :). Спасибо вам за помощь!
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
