【问题标题】:Django model: set a "week of day" field as string from existing models.DateField()Django 模型:将“星期几”字段设置为现有模型中的字符串。DateField()
【发布时间】:2022-01-21 13:20:48
【问题描述】:

我正在尝试根据另一个模型 Teacher 的字段设置 Session 类的字段。基本上,每个教师都有一个指定的星期几(星期一等),我希望每个 Session 对象都将 Teacher.name 作为基于 Session 日期字段的字段。

例如,日期为 2021-12-25 的 Session 类将具有字段 weekday='Saturday' 因此得到 my_teacher_name='Mr.Saturday'

由于我需要一个诸如“星期一”之类的字符串值来查询分配给那天的老师,所以我正在尝试弄清楚如何做到这一点!

代码如下:

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.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" }} 来获得一天中的一周,但我不确定如何实际将其用作模型的字段而不仅仅是用于显示。 非常感谢任何帮助!

【问题讨论】:

    标签: python django django-models orm


    【解决方案1】:

    weekday = date_posted.datetime.strftime("%A") 我认为这是这里的罪魁祸首。 date_posted 已经是日期时间值,因此会出现错误。

    weekday = date_posted.strftime("%A") 应该是您的解决方案。

    【讨论】:

    • 可悲的是,我已经尝试过了,但仍然给了我同样的错误。我认为问题在于 date_posted 和 date 字段都是 models.DataField() 而不是标准的 python datetime 对象。
    • 你能告诉我初始化 date_posted 的部分吗? date_posted 到底是什么?
    猜你喜欢
    • 2021-05-07
    • 2021-04-30
    • 2012-01-12
    • 2011-08-23
    • 2010-10-18
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多