Вложение операторов If для определения значения запроса в представлениях Django

#python #django #if-statement #django-views

#python #django #if-оператор #django-представления

Вопрос:

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

Моя проблема в том, что мне нужно заполнить форму любыми данными, прежде чем кнопка подписки заработает должным образом. Когда форма пуста, приложение укажет, что форму необходимо заполнить. Я не знаком с javascript, чтобы запускать кнопки из этого. Я надеюсь, что смогу узнать, как настроить оператор if, чтобы вызов subscriptions работал без заполнения формы.

Ниже приведен пользовательский интерфейс as и views.py определение. Функции Amount и Delete работают нормально. Это просто кнопка подписки, которая не будет работать, пока я не помещу буквально любые данные в два текстовых поля. Поля.

введите описание изображения здесь

     def usage(request):

    if request.method == 'POST':
        form = UsageForm(request.POST)
        if form.is_valid():
                    if request.POST.get('subscription') == 'Subscription':
                        dt = datetime.today()
                        month = dt.month
                        year = dt.year
                        day = calendar.monthrange(year, month)[1]
                        eom = str(month)   "/"   str(day)   "/"   str(year)
                        anchor = int(time.mktime(datetime.strptime(eom, "%m/%d/%Y").timetuple())   68400)
                        cust_list = json.loads(str(stripe.Customer.list(limit=100)))

                        for item in cust_list['data']:

                            try:
                                print(item['subscriptions']['data'][0]['id'], item['email'], item['id'])

                            except:

                                stripe.Subscription.create(
                                    customer=item['id'],
                                    items=[{'plan': 'plan_DFnNVzXKJ2w0Ad'}],
                                    billing_cycle_anchor=anchor,
                                )

                    if request.POST.get('delete') == 'Delete':
                        cust_info = custinfo.objects.all()
                        cust_info.delete()
                        all_custinfo_items = custinfo.objects.all()

                    else:
                        Sub_ID = form.cleaned_data['Sub_ID']
                        amount = form.cleaned_data['amount']


                        stripe_data = stripe.SubscriptionItem.list(subscription=Sub_ID)

                        sub_item = stripe_data["data"][0]["id"]

                        stripe.UsageRecord.create(
                            quantity=amount,
                            timestamp=int(time.time()),
                            subscription_item=sub_item,
                            action='increment')
                        form.save()

                        print("Last Ran: ", Sub_ID, amount)
                        all_custinfo_items = custinfo.objects.all()

                        return render(request, 'form.html', {'form': form, 'custinfo_items': all_custinfo_items})

    else:
        form = UsageForm()
#        all_subid_items = custinfo.objects.filter(Sub_ID__startswith='sub')
    return render(request, 'form.html', {'form': form})
  

Комментарии:

1. Похоже, вам нужно удалить атрибут required для полей вашей формы. Если вы используете формы модели, вам потребуется настроить null=True, blank=True для поля модели. В противном случае вам необходимо указать required=False для вашего поля формы. Ваше желание желательно. Однако вам потребуется полное обновление страницы при нажатии кнопок.

2. Эй, это сработало. Большое вам спасибо! Следующий вопрос. Возможно ли иметь более одной формы для каждого представления? Думаю, было бы неплохо пропускать разные поля в зависимости от того, что было введено.

3. Безусловно, в зависимости от вашего варианта использования, может быть проще изменить форму с помощью ее метода init , оттуда вы можете условно отображать определенные поля

4. о, интересно. Я еще не использовал init. Поэтому мне нужно будет ускорить это, но мне нравится идея динамической формы. У меня могли бы быть кнопки сверху, чтобы пользователь мог выбрать, что он хочет сделать, и форма могла измениться соответствующим образом. Еще раз спасибо. Я начинаю чувствовать, что набираю обороты в разработке чего-то полезного после многих лет ковыряния в этом. 🙂