从djang中检索的模型对象访问属性

2024-03-28 22:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从传递给类的模型对象访问属性。所以我的观点是:

my_events = Event.objects.order_by('start').filter(start__year=year, start__month=month)

然后我把它传给我的班级,就像这样:

calendar = EventCalendar(my_events).formatmonth(year, month)

然后是我的课

# -*- coding: UTF-8 -*-
from calendar import HTMLCalendar
from datetime import date
from itertools import groupby
from django.utils.html import conditional_escape as esc


class EventCalendar(HTMLCalendar):

    def __init__(self, event):
        super(EventCalendar, self).__init__()
        self.event = self.group_by_day(event)

    def formatday(self, day, weekday):
        if day != 0:
            cssclass = self.cssclasses[weekday]


            if date.today() == date(self.year, self.month, day):
                cssclass += ' today'
            if day in self.event:
                cssclass += ' filled'
                extra_div = ['<div class="event_container"><ul>']
                for event in self.event[day]:
                    extra_div.append('<li>')
                    extra_div.append('<a href="%s">' % event.get_absolute_url())
                    extra_div.append(esc(event.title))
                    extra_div.append('</a></li>')
                extra_div.append('</ul></div>') #END event_container

                #Custom div wrapper
                extra_div.append('<div class="extra_container">')

                #Custom div add_event
                extra_div.append('<div class="add_event">')
                extra_div.append('<a href="#">add event</a>')
                extra_div.append('</div>')

                #Custom div show_day
                extra_div.append('<div class="show_day">')
                extra_div.append('<a href="#">show day</a>')
                extra_div.append('</div>')

                extra_div.append('</div>') #END extra_container

                return self.day_cell(cssclass, '%d %s' % (day, ''.join(extra_div)))

            #Custom div wrapper
            extra_div = ['<div class="extra_container">']

            #Custom div add_event
            extra_div.append('<div class="add_event">')
            extra_div.append('<a href="#">add event</a>')
            extra_div.append('</div>')

            #Custom div show_day
            extra_div.append('<div class="show_day">')
            extra_div.append('<a href="#">show day</a>')
            extra_div.append('</div>')

            extra_div.append('</div>')

            return self.day_cell(cssclass, '%d %s' % (day, ''.join(extra_div)))
        return self.day_cell('noday', '&nbsp;')

    def formatmonth(self, year, month):
        self.year, self.month = year, month
        return super(EventCalendar, self).formatmonth(year, month)

    def group_by_day(self, event):
        event_dict = {}
        start = event.start.day
        end = event.end.day
        return event_dict

    def day_cell(self, cssclass, body):
        return '<td class="%s">%s</td>' % (cssclass, body)

问题在于代码中的group_by_day(self, event)部分。我正在试着找回我活动的开始和结束日期。使用:

start = event.start.day
end = event.end.day

但当我这么做的时候,我会犯错误

'QuerySet' object has no attribute 'start'

这是否意味着当我检索对象时,我只得到一个对它的引用,类似于延迟实例化?还是我只是想搞错?你知道吗

抱歉,如果这个问题很琐碎,对python/django来说真的很陌生。 谢谢


Tags: selfdiveventaddreturnshowcustomextra
1条回答
网友
1楼 · 发布于 2024-03-28 22:12:59
Event.objects.order_by('start').filter(start__year=year, start__month=month)

返回匹配的Event对象的列表。然后将此查询集列表传递给:

group_by_day(self, event)

从参数名称中可以看出,您认为您正在传递单个事件。所以它不起作用。你知道吗

相关问题 更多 >