【问题标题】:How to pass user information to utils.py in django如何在 django 中将用户信息传递给 utils.py
【发布时间】:2021-12-03 07:35:36
【问题描述】:

我正在尝试将用户信息传递给 utils.py,但不知道如何。这是我遇到问题的 utils.py 的一部分:

class Calendar(HTMLCalendar):
    def formatmonth(self, withyear=True):
            events = Class.objects.filter(date__year=self.year, date__month=self.month).exclude(student=None)
    
            cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar">\n'
            cal += f'{self.formatmonthname(self.year, self.month, withyear=withyear)}\n'
            cal += f'{self.formatweekheader()}\n'
            for week in self.monthdays2calendar(self.year, self.month):
                cal += f'{self.formatweek(week, events)}\n'
            return cal

问题是查询集events。我想为它做如下的事情:

if self.request.user.is_student:
    events = Class.objects.filter(date__year=self.year, date__month=self.month).exclude(student=None)
if self.request.user.is_teacher:
        events = Class.objects.exclude(student=None)

基本上,我想根据使用网站的用户更改查询集。这就是为什么我需要在 utils.py 中使用 self.request.user 之类的东西。我尝试在views.py 中做def get_queryset(self),但它似乎不起作用。如果可能的话,我宁愿在我的views.py 中控制查询集,而不是我的utils.py。我希望你能帮忙,有任何问题都可以给我。

根据你们中的一些人的要求,这是我的观点:

class CalendarView(LoginRequiredMixin, generic.ListView):
    model = Class
    template_name = 'leads/calendar.html'

    def get_queryset(self):
        return Class.objects.filter(date=datetime.date(1111,11,11))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # use today's date for the calendar
        d = get_date(self.request.GET.get('month', None))
        # Instantiate our calendar class with today's year and date
        cal = Calendar(d.year, d.month)
        # Call the formatmonth method, which returns our calendar as a table
        html_cal = cal.formatmonth(withyear=True)
        context['calendar'] = mark_safe(html_cal)
        context['prev_month'] = prev_month(d)
        context['next_month'] = next_month(d)
        return context
    

def get_date(req_day):
    if req_day:
        year, month = (int(x) for x in req_day.split('-'))
        return datetime.date(year, month, day=1)
    return datetime.datetime.today()
        
...

如您所见,如果get_queryset 有效,我不需要做所有这些事情。

【问题讨论】:

  • 你能看到请求中的用户对象吗?如果是,您可以看到 init 的值。
  • 对不起,我不太明白你想让我做什么。你能澄清一下吗?
  • print(self.request.user) 在您的formatmonth 方法中并分享价值。
  • 我明白了:NameError: name 'request' is not defined
  • 打印(self.request.user)

标签: python django django-models django-views django-templates


【解决方案1】:

您可以像下面这样更新 querset 方法,我相信日期是您模型类中的日期时间字段。

def get_queryset(self):
    return self.model.objects.filter(date=datetime.datetime(2020,11,11))

【讨论】:

  • 我收到此错误:TypeError: 'module' object is not callable...
  • 已经修改了上面的代码,请尝试一下。
  • 我实际上只需要使用 datetime.date 就可以了。但是,它似乎仍然没有在模型呈现为日历之前对其进行过滤。
  • datetime.datetime(2020,11,11)
  • 是的……还是不行。当我打印 self.model.objects.filter(date=datetime.datetime(2020,11,11)) 时,它会正确打印。但是,问题是这对日历没有影响。似乎唯一“有效”的查询集是 utils.py 中的events
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 2011-09-16
  • 2016-01-01
  • 2017-07-24
  • 2019-02-07
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多