Django модель: установите поле "неделя дня" как строку из существующей models.DateField()
Я пытаюсь установить поле класса Session
на основе поля другой модели Teacher
. В основном, каждый преподаватель имеет назначенный день недели (понедельник и т.д.), и я хочу, чтобы каждый объект Session имел поле Teacher.name как поле, основанное на поле даты Session.
Например, класс сессии с датой=2021-12-25 будет иметь поле weekday='Saturday', следовательно, получит my_teacher_name='Mr.Saturday'
Поскольку мне нужно строковое значение, такое как "Monday", чтобы запросить учителя, назначенного на этот день, я пытаюсь понять, как это сделать!
Вот код:
from django.utils import timezone
from datetime import date, datetime
class Session(models.Model):
class Timeblock(models.TextChoices):
A = "8:00-8:20", "8:00-8:20"
B = "8:20-8:40", "8:20-8:40"
C = "8:40-9:00", "8:40-9:00"
D = "9:00-9:20", "9:00-9:20"
E = "9:20-9:40", "9:20-9:40"
F = "9:40-10:00", "9:40-10:00"
student = models.ForeignKey(User, on_delete=models.CASCADE)
date_posted = models.DateTimeField(default=timezone.now)
date = models.DateField()
timeblock = models.CharField(max_length=10, choices=Timeblock.choices)
helptype = models.CharField(max_length=50)
class Teacher(models.Model):
class Weekday(models.TextChoices):
mon = "Monday", "Monday"
tue = "Tuesday", "Tuesday"
wed = "Wednesday", "Wednesday"
thu = "Thursday", "Thursday"
fri = "Friday", "Friday"
sun = "Sunday", "Sunday"
name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
expertise = models.CharField(max_length=100)
assigned_day = models.CharField(max_length=10, choices=Weekday.choices)
def __str__(self):
return self.name
Вот что я пробовал до сих пор в классе Session:
weekday = date_posted.datetime.strftime("%A")
my_teacher = Teacher.objects.filter(assigned_day=weekday)
my_teacher_name = my_teacher.name
Это вызвало ошибку: AttributeError: 'DateTimeField' object has no attribute 'datetime'
Я также знаю, что могу получить неделю дня, используя {{ session.date|date:"F d - l" }}
в шаблонах, но я не уверен, как на самом деле использовать это как поле модели, а не только для отображения.
Буду признателен за любую помощь!!!
weekday = date_posted.datetime.strftime("%A")
Я думаю, что это и есть виновник.
date_posted уже является значением datetime и отсюда ошибка.
weekday = date_posted.strftime("%A")
должно быть вашим решением.