1

私はテーブルにいくつかのデータを表示している小さなフォームを構築しています。それに加えて、私は2つのdropdownを持っています。テーブルで見たい。django形式のデータを公開する

私の質問は、私はCBV FormViewを使用していることに注意してください、私の見解では、これを処理する方法が少し混乱している、私はdjangoフォームが要求を取得し使用して、現在の月と年をdropdownを取り込むことができる方法です。

私はこの form.py

from django import forms 

import datetime 


class StatisticsForm(forms.Form): 
    """TODO: Simple form with two field, one for year 
    other for month, so user can list Statistics for 
    current month and year. 
    :returns: TODO""" 
    invoice_month = forms.CharField(label="month", max_length=225) 
    invoice_year = forms.CharField(label="year", max_length=225) 

    def get_initial(self): 
     initial = super(StatisticsForm, self).get_initial() 
     initial["invoice_month"] = datetime.date.today() 
     initial["invoice_year"] = datetime.date.today() 
     return initial 

のようなものを試してみたし、私の見解では、私はテーブルを表示していますし、私は残りの部分を行う必要があります。

view.py

from django.views.generic.edit import FormView 

from .models import Rate 
from statistics.forms import StatisticsForm 
from statistics.services import StatisticsCalculation 


class StatisticsView(FormView): 
    """ 
    TODO: We need to handle 
     Total Invoice - no matter how old, basically all of them 
     Current month Total Invoice 
    """ 
    template_name = "statistics/invoice_statistics.html" 
    form_class = StatisticsForm 

    def get_context_data(self, **kwargs): 
     context = super(StatisticsView, self).get_context_data(**kwargs) 

     def_currency = Rate.EUR 

     context["can_view"] = self.request.user.is_superuser 
     context["currency"] = def_currency 
     context["supplier_statistic"] = StatisticsCalculation.statistic_calculation(default_currency) 
     return context 

答えて

2

FormViewは、実際のフォームオブジェクトを作成すると、それはget_form_kwargs()からフォームに渡す引数を取得します。それは自分自身にget_initial()を呼んだか

def get_form_kwargs(self): 
    """ 
    Returns the keyword arguments for instantiating the form. 
    """ 
    kwargs = { 
     'initial': self.get_initial(), 
     'prefix': self.get_prefix(), 
    } 
    if self.request.method in ('POST', 'PUT'): 
     kwargs.update({ 
      'data': self.request.POST, 
      'files': self.request.FILES, 
     }) 
return kwargs 

お知らせ(ビュー)ではなく、フォームです。初期化されていないため、フォーム上で呼び出すことはできません。あなたの方法をビューに移して、あなたは行くのが良いです。

stdlib datetime.date.today()ではなく、django.utils.timezone.now()を使用してください。これはdjangoのタイムゾーン設定を尊重するためです。そうでない場合は、時々別のオフクイッククォークが表示されることがあります。

編集:またChoiceFieldを使用するようにフォームを更新し、timezone.now().monthtimezone.now().yearでデフォルト値を設定する必要があります。

ハッピーコーディング。私は私が右または使用して間違い、最初の時間を作る `select2`だCharFields`が、私は` ChoiceField`を避けたい `作成していますなぜ

私は、このフィールドに` select2`ライブラリを使用したい
+0

は、thatsの。 – PetarP

+0

は((https://django-select2.readthedocs.io/en/latest/django_select2.html#django_select2.forms.Select2Widget)[ちょうど形でウィジェットを指定]、あなたは 'ジャンゴ・select2'を使用していると仮定すると、他のすべてのインストールドキュメントに従ってください)。 – Anonymous

+0

いいえ、私は標準ライブラリを使用しています – PetarP

関連する問題