Django Models:使用DateField作为ForeignKey时出错

时间:2016-11-07 15:43:33

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

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

  

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

非常感谢任何有关如何正确完成此事的建议!

1 个答案:

答案 0 :(得分:1)

a.date返回datetime对象,但您必须设置格式。

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

您还可以在settings.py

中设置默认日期时间格式
DATETIME_FORMAT = 'Y-m-d'

但是我不确定这会是你情况的解决方案。