Модели:
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, default=1,related_name='Employee')
eid = models.IntegerField(primary_key=True)
salary = models.IntegerField(null=True, blank=True)
gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default=1)
contactno = models.CharField(max_length=10, blank=False)
email = models.CharField(max_length=50 ,null=True, blank=True)
country = models.CharField(max_length=30)
address = models.CharField(max_length=60)
def __str__(self):
return self.user.first_name + '_' + self.user.last_name
class Attendance(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, default=1,related_name='Attendance')
attendance_date = models.DateField(null=True)
in_time = models.TimeField(null=True)
out_time = models.TimeField(null=True ,blank=True)
description = models.TextField(null=True, blank=True)
def __str__(self):
return str(self.employee) + '-' + str(self.attendance_date)
class Breaks(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, default=1)
break_in = models.TimeField(null=True, blank=True)
break_out = models.TimeField(null=True, blank=True)
attendance =models.ForeignKey(Attendance, on_delete=models.CASCADE, default=1,related_name='Breaks')
def __str__(self):
return str(self.employee) + '-' + str(self.break_in) + '-' + str(self.break_out)
def detail_attendance(request):
attendance_list = Attendance.objects.filter(employee__user_id=request.user.id)
counter = Counter()
return render(request, 'employee/detail_attendance.html', {'attendance_list': attendance_list, 'counter': counter})
def detail_break(request):
break_list=Breaks.objects.filter(employee__user_id=request.user.id )
return render(request, 'employee/detail_break.html', {'break_list': break_list})
Я создал функцию выше для разрывов деталей. Я получаю конкретные пользовательские данные, но он также дает мне предыдущие данные. Поэтому мне нужны данные на конкретную дату, например, в моих моделях посещаемости я добавляю посещаемость каждого пользователя.
Пожалуйста, дайте мне знать, что я должен изменить в подробностях.
например, я отметил посещаемость пользователя на дату 28/11/2022 и хочу отфильтровать перерывы для пользователя в тот же день, но когда я пишу приведенный выше запрос, он показывает мне перерывы на несколько дней, а не на конкретную дату.
Но в вашей модели Breaks
нет DateField, у него есть два TimeField(s)
В вашей модели Attendance
у вас есть DateField
как attendance_date
. Вам нужно указать, из какой модели вы хотите отфильтровать дату?
но в четвертой строке я наследую от модели посещаемости, работает ли она таким образом или я должен добавить поле даты
Вы хотите отфильтровать те перерывы, у которых есть дата посещения, поскольку 28/11/22
означает сегодняшнюю дату, как вы упомянули выше?
да, это сработало, но если я хочу проверить предыдущий день до перерывов и другую дату, он показывает данные только текущей даты
Давайте продолжим обсуждение в чате.
Breaks.objects.filter(date__range=["2011-01-01", "2011-01-31"])
Или, если вы просто пытаетесь фильтровать по месяцам:
Breaks.objects.filter(date__year='2011',
date__month='01')
Пожалуйста, ответьте на это сообщение, если оно не работает.
Используйте этот набор запросов:
from django.db.models import Q
from datetime import date
Breaks.objects.filter(
Q(employee__user=request.user) &
Q(attendance__attendance_date=date.today())
)
Или:
Breaks.objects.filter(
Q(employee__user=request.user) &
Q(attendance__attendance_date = "2022-11-28")
)
С какой конкретной даты вы хотите фильтровать, можете ли вы уточнить? Не ясно.