Джанго, как получить выбор форм. Форма - PullRequest
0 голосов
/ 22 июня 2019

Как я могу обработать выделение (выбор RadioButton) в моем views.py ?

В настоящее время я обрабатываю это статически для btc (биткойн), но мне нужно, чтобы это работало для ltc, xmr и т. Д. В качестве валюты. Как я могу получить выбор пользователя этой формы или, другими словами, выбранную валюту, выбранную пользователем?

my views.py :

...
if request.method == "POST":
    form = CurrencyBuySelectForm(request.POST)
    currency = form['currency'].value()
    # check account balance
    if form.is_valid:
        if currency == 'btc':
            price = dollar_to_coin(item.price_usd, 'BTC')
            if request.user.acc_btc_balance < price:
                messages.error(request,'Not enough balance to buy this item')
                return redirect('item', pk=item.pk)
            else:
                # do blabla
                ...

my forms.py :

WALLET_CHOICE = [
    ('btc', 'BTC'),
    ('xmr', 'XMR'),
    ('ltc', 'LTC'),
    ... 
]

class CurrencyBuySelectForm(forms.Form):
    currency = forms.ChoiceField(choices=WALLET_CHOICE, widget=forms.RadioSelect())
    captcha = CaptchaField()

    def __init__(self, *args, **kwargs):
        super(CurrencyBuySelectForm, self).__init__(*args, **kwargs)
        self.fields['currency'].label = mark_safe('')

    def clean(self):
        cleaned_data = super(CurrencyBuySelectForm, self).clean()
        currency = cleaned_data.get(choices=WALLET_CHOICE, widget=forms.RadioSelect())
        if not currency:
            raise forms.ValidationError('Something went wrong')

обработка, как описано здесь, похоже, не работает:

https://docs.djangoproject.com/en/dev/topics/forms/#using-a-form-in-a-view

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Похоже, вам нужно добавить dict

my_dict= {'btc': 'BTC', 'xmr': 'XMR', 'ltc': 'LTC'}

и затем ссылаться на них через my_dict.keys() и my_dict.values().

Что-то вроде:

if currency in my_dict.keys:
    val = my_dict[currency]

price = dollar_to_coin(item.price_usd, val)

РЕДАКТИРОВАТЬ: Что касается присвоения currency в views.py , может быть лучше добавить еще один метод в ваш класс CurrencyBuySelectForm.Метод clean() должен очищать только данные, затем вы можете добавить метод currency(), который выполняет присваивание и проверку currency и возвращает его.Затем вы можете ссылаться на него, используя currency = form.currency()

Что-то вроде:

views.py

my_dict= {'btc': 'BTC', 'xmr': 'XMR', 'ltc': 'LTC'}

if request.method == "POST":
    form = CurrencyBuySelectForm(request.POST)
    currency = form.currency()
    # check account balance
    if form.is_valid:
        if currency in my_dict.keys():
            price = dollar_to_coin(item.price_usd, my_dict[currency])
            if request.user.acc_btc_balance < price:
                messages.error(request,'Not enough balance to buy this item')
                return redirect('item', pk=item.pk)
            else:
                # do blabla

forms.py

WALLET_CHOICE = [
    ('btc', 'BTC'),
    ('xmr', 'XMR'),
    ('ltc', 'LTC'),
    ... 
]

class CurrencyBuySelectForm(forms.Form):
    currency = forms.ChoiceField(choices=WALLET_CHOICE, widget=forms.RadioSelect())
    captcha = CaptchaField()

    def __init__(self, *args, **kwargs):
        super(CurrencyBuySelectForm, self).__init__(*args, **kwargs)
        self.fields['currency'].label = mark_safe('')

    def clean(self):
        self.cleaned_data = super(CurrencyBuySelectForm, self).clean()

    def currency(self):
        self.currency = self.cleaned_data.get(choices=WALLET_CHOICE, widget=forms.RadioSelect())
        if not self.currency:
            raise forms.ValidationError('Something went wrong')
        return self.currency
0 голосов
/ 22 июня 2019

вы должны:

if request.method == 'POST':
   form = CurrencyBuySelectForm(request.POST)
if form.is_valid()
   request.GET.get['currency']

с request.GET.get ['currency'] вы можете понять, какой пользователь выбран и размещен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...