Я написал запрос django, но мне нужна конкретная информация о пользователе на конкретную дату

Модели:

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

Я создал функцию выше для разрывов деталей. Я получаю конкретные пользовательские данные, но он также дает мне предыдущие данные. Поэтому мне нужны данные на конкретную дату, например, в моих моделях посещаемости я добавляю посещаемость каждого пользователя.

Пожалуйста, дайте мне знать, что я должен изменить в подробностях.

С какой конкретной даты вы хотите фильтровать, можете ли вы уточнить? Не ясно.

Sunderam Dubey 28.11.2022 06:45

например, я отметил посещаемость пользователя на дату 28/11/2022 и хочу отфильтровать перерывы для пользователя в тот же день, но когда я пишу приведенный выше запрос, он показывает мне перерывы на несколько дней, а не на конкретную дату.

Nishant Sharma 28.11.2022 06:49

Но в вашей модели Breaks нет DateField, у него есть два TimeField(s)

Sunderam Dubey 28.11.2022 06:52

В вашей модели Attendance у вас есть DateField как attendance_date. Вам нужно указать, из какой модели вы хотите отфильтровать дату?

Sunderam Dubey 28.11.2022 06:53

но в четвертой строке я наследую от модели посещаемости, работает ли она таким образом или я должен добавить поле даты

Nishant Sharma 28.11.2022 06:54

Вы хотите отфильтровать те перерывы, у которых есть дата посещения, поскольку 28/11/22 означает сегодняшнюю дату, как вы упомянули выше?

Sunderam Dubey 28.11.2022 07:39

да, это сработало, но если я хочу проверить предыдущий день до перерывов и другую дату, он показывает данные только текущей даты

Nishant Sharma 28.11.2022 09:49

Давайте продолжим обсуждение в чате.

Sunderam Dubey 28.11.2022 10:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Другие вопросы по теме

Похожие вопросы