2017-03-31 59 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中的getter相同的含義。 –

+0

該項目發佈並保存在數據庫中,但它仍然存在錯誤:''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

這裏是什麼,我已經爲我的一個項目做了一個示例訪問主鍵,但請注意,這是使用Django的REST的框架,所以我不知道這是否會爲工作您。

serializers.py

class JournalSerializer(serializers.ModelSerializer): 

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

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