如何将datetime.combine添加到ListView中的get_context_data

Hellbea

我有下一个代码,并尝试将合并事件的日期和时间添加到上下文值中

在models.py中

class Event(models.Model):
    event_date= models.DateField(auto_now=False, auto_now_add=False)
    evet_time= models.TimeField(auto_now=False, auto_now_add=False)

在view.py中

class EventList(FilterMixin, ListView):
    model = Event
    filter_class = EventFilter
    template_name = 'events/event_list.html'


    def get_context_data(self, *args, **kwargs):
        context = super(EventList, self).get_context_data(*args, **kwargs)
        context["filter_form"] = EventFilter(data=self.request.GET or None)
        return context

需要在上下文中添加下一个值。

context["now"] = datetime.utcnow() + timedelta(hours=1)-工作正常context["event_date_time"]-如何结合db表中的日期和时间?

接下来尝试:

context["event_date_time"] = datetime.combine(self.event_date, self.event_time) 

不要工作

 Exception Value:   
    'EventList' object has no attribute 'event_date'

谢谢。

wobbily_col

您正在调用self.event_date和self.event_time,其中“ self”是EventList视图,而不是这些字段实际所在的Event模型。

当您使用列表视图时,视图的内容基于查询集而不是模型的一个特定实例,因此我将在Event上创建模型方法来处理此问题。

class Event(models.Model):
    event_date= models.DateField(auto_now=False, auto_now_add=False)
    evet_time= models.TimeField(auto_now=False, auto_now_add=False)

    def event_date_time(self):
        return datetime.combine(self.event_date, self.event_time) 

您不需要将其添加到上下文中,因为它将在您在模板中迭代的每个实例上都可用,如下所示:

 {% for event in event_list %}
   ....html here...
   {{ event.event_date_time }}
   ....
 {% endfor %}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章