【问题标题】:Django Models: error when using DateField as ForeignKeyDjango 模型:使用 DateField 作为 ForeignKey 时出错
【发布时间】:2017-03-21 00:38:26
【问题描述】:

在尝试将模型类的 DateField 用作另一个模型类的 ForeignKey 并在两个类上使用默认设置为今天时遇到问题。错误信息是:

django.core.exceptions.ValidationError: ["'self.date' 值的日期格式无效。它必须是 YYYY-MM-DD 格式。"]

代码:

class DailyImage(models.Model):
    date = models.DateField(auto_now_add=True, unique=True)
    name = models.CharField(max_length = 1000)
    image = models.CharField(max_length = 1000)
    location = models.CharField(max_length = 1000)

    def __str__(self):
        return str(self.id) + ": " + self.name + ", " + self.location

class JournalEntry(models.Model):
    date = models.DateField(auto_now_add=True)
    journal = models.CharField(max_length = 5000)
    image = models.ForeignKey(DailyImage, to_field='date', default='self.date')

该网站是一份日报。每天,它会将 unsplash.it 中的图像添加到 DailyImage 类,然后将其显示为主页上的标题,以及当天创建的日记条目页面上的标题。创建日记帐分录后,应自动将其引用到当天创建的图像。

在shell中测试,日期字段似乎匹配,但格式为:datetime.date(YYYY, MM, DD)

>>> a = JournalEntry.objects.get(pk=1)
>>> a
<JournalEntry: test>
>>> a.date
datetime.date(2016, 11, 7)
>>> from journal.models import DailyImage as image
>>> b = image.objects.get(pk=1)
>>> b.date
datetime.date(2016, 11, 7)
>>> b.date == a.date
True

任何关于如何正确完成此操作的建议将不胜感激!

【问题讨论】:

    标签: django django-models foreign-key-relationship datefield


    【解决方案1】:

    a.date 返回日期时间对象,但必须设置格式。

    t = datetime.date(2016, 11, 7) 
    t.strftime("%Y-%m-%d")
    # '2016-11-07'
    

    您还可以在 settings.py 中设置默认的日期时间格式

    DATETIME_FORMAT = 'Y-m-d'
    

    但是我不确定这是否适合您的情况。

    【讨论】:

    • 感谢您的快速回答。不过,这些似乎都不适合我。相反,我创建了一个新变量 today = datetime.today.strftime("%Y-%m-%d") 并将其分配给图像字段: >image = models.ForeignKey(DailyImage, to_field='date', default ='today') 尚未对其进行测试以查看它是否正常工作,但到目前为止看起来还可以
    • 我认为您应该忽略to_field='date'(和默认值),它将由id 自动链接。你正在做的事情非常罕见。然后你也可以省略图片的日期,因为它已经可以通过 Journal 获得。
    • 在此过程中,为什么不使用 OneToOneField 而不是 Foreignkey(=一对多)。
    • 谢谢伊克斯!我实际上想将它链接到日期,因为每天都会有一个新图像(也会显示在主页启动画面上),但并非所有用户都会在当天创建一个新条目。我想从创建之日起将条目与图像联系起来。我还希望图像是全局的,条目是用户特定的。我绝对想让这个更清洁,并且会喜欢任何其他建议
    猜你喜欢
    • 2014-07-23
    • 2012-06-13
    • 1970-01-01
    • 2018-12-15
    • 2021-09-12
    • 2017-10-19
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多