2017-03-31 58 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)