Как получить идентификатор пользователя текущей подключенной учетной записи в models.py
Я хочу задать условие, различая, когда user.id объекта Leave и user id текущей учетной записи доступа совпадают, а когда нет. Оригинальная функция get_html_url имела только аргумент 'self'.
Если к аргументу для получения идентификатора пользователя текущего подключенного аккаунта добавлено 'request', возникает ошибка get_html_url() missing 1 required positional argument: 'request'.
Похоже, что мне нужно добавить запрос в utils.py, чтобы исправить ошибку. Но я не знаю, какую функцию нужно добавить. Помогите.
[models.py]
class Leave(models.Model):
name = models.CharField(max_length=50, blank=True, null=True)
kind = models.CharField(choices=KIND_CHOICES, max_length=20, blank=True, null=True)
from_date = models.DateField(blank=True, null=True)
end_date = models.DateField(blank=True, null=True)
memo = models.TextField(blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True)
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now=True)
@property
def get_html_url(self, request -----> dAre there any errors?):
url = reverse('leave:leave_edit', args=(self.id,))
user = request.user.id -----> Are there any errors?
if self.kind == 'Annual' and self.user.id == user:
return f'<div class="Annual-title"><a href="{url}" style="color:black;"> {self.name}</a></div>'
elif self.kind == 'Half' and self.user.id == user:
return f'<div class="Half-title"><a href="{url}" style="color:black;"> {self.name} </a></div>'
elif self.kind == 'Holiday' and self.user.id == user:
return f'<div class="Holiday-title"><a href="{url}" style="color:black;"> {self.name} </a></div>'
elif self.kind == 'Annual' and self.user.id != user:
return f'<div class="Annual-title" data-toggle="modal" data-target="#leave_{self.id}"> {self.name} </div>'
elif self.kind == 'Half' and self.user.id != user:
return f'<div class="Half-title" data-toggle="modal" data-target="#leave_{self.id}"> {self.name} </div>'
elif self.kind == 'Holiday' and self.user.id != user:
return f'<div class="Holiday-title" data-toggle="modal" data-target="#leave_{self.id}"> {self.name} </div>'
[utils.py]
class Calendar(HTMLCalendar):
def __init__(self, year=None, month=None, user=None):
self.year = year
self.month = month
self.user = user
super(Calendar, self).__init__()
def leave_formatday(self, day, events):
events_per_day = events.annotate(end_date_month=ExtractMonth('end_date')) \
.filter(...)
d = ''
for event in events_per_day:
d += f'{event.get_html_url}'
if day != 0:
return f"<td><span class='date'>{day}</span><ul> {d} </ul></td>"
return '<td></td>'
def leave_formatweek(self, theweek, events):
week = ''
for d, weekday in theweek:
week += self.leave_formatday(d, events)
return f'<tr> {week} </tr>'
def leave_formatmonth(self, right, withyear=True):
events = Leave.objects.filter(is_deleted=False) \
.filter(Q(from_date__year=right.year, from_date__month=right.month) |
Q(end_date__year=right.year, end_date__month=right.month))
cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar" style="width: calc(50% - 10px); float:left; margin: 5px;">\n'
cal += f'{self.formatmonthname(right.year, right.month, withyear=withyear)}\n'
cal += f'{self.formatweekheader()}\n'
for week in self.monthdays2calendar(right.year, right.month):
cal += f'{self.leave_formatweek(week, events)}\n'
return cal
[views.py]
class CalendarView(generic.ListView):
model = Patient
template_name = 'pages/leave/leave.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
left = get_date(self.request.GET.get('L_month', None))
right = get_date(self.request.GET.get('R_month', None))
context['leave_prev_month'] = right_prev_month(right)
context['leave_next_month'] = right_next_month(right)
context['leave_get_month'] = right_get_month(right)
first_name = self.request.user
cal = Calendar(left.year, left.month, first_name)
cal.setfirstweekday(6)
leave_cal = Calendar(right.year, right.month)
leave_cal.setfirstweekday(6)
leave_html_cal = leave_cal.leave_formatmonth(right, withyear=True)
context['leave_calendar'] = mark_safe(leave_html_cal)
context['leave'] = Leave.objects.filter(is_deleted=0)
return context