2017-03-31 11 views
1

現在のアイテムから日付フィールドを取得しようとしています。私は構文の権利を得ることができません。私はちょうど私が提出したフォームから日付データを取得することについてどのように行くだろうか?私は、下のコードを試すたびに、私は次のエラーを取得する:あなたの助けを事前に自己オブジェクトから日付を取得

'NoneType' object has no attribute 'get' 

views.py

class EntryCreate(CreateView): 
    form_class = EntryForm 
    template_name = 'argent/entry_form.html' 

    def form_valid(self, form): 
     e_item = self.object.get() 
     e_date = e_item.get('date') 
     e_month = e_date.strftime('%B') 
     e_year = e_date.year 
     qs = MonthYear.objects.filter(month=e_month, year=e_year) 

models.py

class Entry(models.Model): 
    date = models.DateField(blank=True, null=True,) 
    euros = models.CharField(max_length=500, blank=True, null=True) 
    comments = models.CharField(max_length=900, blank=True, null=True) 

感謝。

+0

'get()'を使わずにモデル値にアクセスしようとしましたか?代わりに 'e_item = self.object'とそれに続く' e_date = e_item.date'のようなものはありますか?私は 'get()'メソッドは辞書に使われ、Javaのゲッターと同じ意味を持ちません。 –

+0

アイテムが投稿され、dbに保存されますが、それでもエラーが発生します: ''NoneType'オブジェクトは呼び出し不可能です。何らかの理由で、私はちょうど提出したオブジェクトからデータを引き出すことができません。例えば、 'e_item.date'を印刷すると、' None'となります。 – grigs

+0

申し訳ありません、元の質問に答えるために、はい、私は 'get()'を使わずに試しました。それは 'NoneType 'オブジェクトが呼び出し可能ではない'エラーを取得するときです。私は提出されたアイテムからデータを引き出すことはできません。 – grigs

答えて

0

SOLUTION:

だから、それが提出された直後のアイテムからデータを引っ張っへのトリックは、最初にフォームを保存することです。

class EntryCreate(CreateView): 
    form_class = EntryForm 
    template_name = 'argent/entry_form.html' 

    def form_valid(self, form): 
     item = form.save() 
     item_date = item.date 
     e_month_d = item_date.strftime('%m') 
     e_month = item_date.strftime('%B') 
     e_year = item_date.year 

フォームを保存すると、フォーム内のデータが操作可能になります。

0

self.object.dateを試してください。

これが見つかりました:Django Docs: Form Handlingここでの例は、self.object.pk

を使ってプライマリキーにアクセスします。これは私のプロジェクトの1つの例ですが、これはDjango-Rest-Frameworkを使用していたことに注意してください君は。

serializers.py

class JournalSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Journal 
     exclude = ('id', 'user',) 

    def get_date(self, obj): 
     return obj.date.replace(microsecond=0)