2016-12-12 2 views
1

У меня есть следующий код и пытается добавить к значению контекста даты и времени cobmine событийКак добавить datetime.combine к get_context_data в ListView

в 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) 

в целях .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) - work fine 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' 

Thx для справки.

ответ

0

Вы вызываете self.event_date и self.event_time, где «self» - это представление EventList, а не модель 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 %} 
Смежные вопросы