Django 从自对象获取日期

Django 从自对象获取日期,django,python-3.x,django-views,Django,Python 3.x,Django Views,我正试图从当前项目中提取日期字段。我似乎不能理解正确的语法。如何从我刚刚提交的表单中获取日期数据?每当我尝试下面的代码时,都会出现以下错误: 'NoneType' object has no attribute 'get' 视图.py class EntryCreate(CreateView): form_class = EntryForm template_name = 'argent/entry_form.html' def form_valid(self, fo

我正试图从当前项目中提取日期字段。我似乎不能理解正确的语法。如何从我刚刚提交的表单中获取日期数据?每当我尝试下面的代码时,都会出现以下错误:

'NoneType' object has no attribute 'get'
视图.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)
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)
class JournalSerializer(serializers.ModelSerializer):

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

    def get_date(self, obj):
        return obj.date.replace(microsecond=0)
型号.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)
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)
class JournalSerializer(serializers.ModelSerializer):

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

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

提前感谢您的帮助。

您应该尝试使用
self.object.date

我找到了这个:。这里的示例使用
self.object.pk

这里是我为我的一个项目所做的一个例子,但请注意,这是使用Django Rest框架,所以我不确定这是否适用于您

序列化程序.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)
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)
class JournalSerializer(serializers.ModelSerializer):

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

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

您应该尝试使用
self.object.date

我找到了这个:。这里的示例使用
self.object.pk

这里是我为我的一个项目所做的一个例子,但请注意,这是使用Django Rest框架,所以我不确定这是否适用于您

序列化程序.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)
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)
class JournalSerializer(serializers.ModelSerializer):

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

    def get_date(self, obj):
        return obj.date.replace(microsecond=0)
解决方案:

因此,在项目提交后立即从中提取数据的诀窍是首先保存表单

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
保存表单后,表单中的数据可供操作

解决方案:

因此,在项目提交后立即从中提取数据的诀窍是首先保存表单

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

保存表单后,表单中的数据可供操作

您是否尝试过在不使用
get()
的情况下访问模型值?而是像
e_item=self.object
后面跟着
e_date=e_item.date
?我相信
get()
方法用于字典,它的含义与Java中的getter不同。该项在数据库中发布和保存,但仍然有错误:
'NoneType'对象不可调用
。由于某些原因,我无法从刚刚提交的对象中提取数据。例如,当我打印
e_item.date
时,我得到了
None
。很抱歉,要回答您最初的问题,是的,我没有使用
get()
。这时我得到了
NoneType'对象不可调用的错误。我似乎无法从提交的项目中提取任何数据。您是否尝试过在不使用
get()
的情况下访问模型值?而是像
e_item=self.object
后面跟着
e_date=e_item.date
?我相信
get()
方法用于字典,它的含义与Java中的getter不同。该项在数据库中发布和保存,但仍然有错误:
'NoneType'对象不可调用
。由于某些原因,我无法从刚刚提交的对象中提取数据。例如,当我打印
e_item.date
时,我得到了
None
。很抱歉,要回答您最初的问题,是的,我没有使用
get()
。这时我得到了
NoneType'对象不可调用的错误。我似乎无法从提交的项目中提取任何数据。