Django возвращает пустой QuerySet, несмотря на совпадение имен
У меня есть модель Employee
, где одним из полей является manager
, которое является ForeignKey
к другой модели под названием Manager
.
Я проверяю, совпадает ли значение менеджера, которое я передаю через предыдущую страницу, с объектом Employee
, у которого есть тот же менеджер, и хочу получить только те объекты, у которых менеджер совпадает. Однако, несмотря на то, что у меня есть сотрудники, у которых разные менеджеры, я пытаюсь фильтровать с помощью Employee.objects.get(manager=manager)
или Employee.objects.filter(manager=manager)
, и ни один из них ничего не возвращает.
filter
возвращает пустой набор запросов, а get
говорит Employee matching query does not exist.
, несмотря на явное совпадение. Любая помощь будет оценена по достоинству, спасибо!
КОД
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from .models import Attendance
from .models import Employee, Manager
from datetime import datetime
employee_list = ["John", "Jane", "Jacob", "Mark", "Jingleheimer", "Rob", "Schmidt"]
# Create your views here.
@login_required
def home(request):
return render(request, 'index.html')
@login_required
def attendance(request):
manager_list = Manager.objects.all()
now = timezone.now().date
status = 0
for manager in manager_list:
if ' ' in manager.name:
manager.select_name = manager.name.replace(' ', '_')
else:
pass
if request.method == 'POST':
manager = request.POST.get('manager')
print(manager)
return redirect('mark_attendance', manager=manager)
return render(request, 'attendance.html', {
"date": now,
"status": status,
"manager_list": manager_list,
})
@login_required
def mark_attendance(request, manager):
print(manager) ##prints out the Manager object right
employee_list = Employee.objects.get(manager=manager)
print(employee_list)
if request.method == "POST":
for employee in employee_list:
print(employee.pk)
decision = request.POST.get(f'decision_{employee.pk}')
print(decision)
status = Attendance(employee=employee, date=datetime.now(), status=decision)
status.save()
return HttpResponseRedirect('mark_attendance')
else:
return render(request, 'mark_attendance.html', {
"employee_list": employee_list,
})
models.py
from django.db import models
import math
from django.core.validators import MinValueValidator, MaxValueValidator
from django.contrib.auth.models import AbstractUser
from django.db.models.signals import post_save, post_delete
from datetime import timedelta
# Create your models here.
class User(AbstractUser):
pass
class Manager(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
id = models.CharField(primary_key=True, max_length=100)
name = models.CharField(max_length=100)
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
employee_id = models.CharField(primary_key='True', max_length=100)
name = models.CharField(max_length=200)
manager = models.ForeignKey(Manager, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.name
class AssignTime(models.Model):
day = models.CharField(max_length=15)
class Attendance(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
date = models.DateField(default='2018-10-23')
status = models.BooleanField(default=False, choices=(
(False, "Absent"),
(True, "Present"),
))
def __str__(self):
sname = Employee.objects.get(name=self.employee)
return '{0}'.format(sname.name)
class AttendanceRange(models.Model):
start_date = models.DateField()
end_date = models.DateField()