2016-11-07 19 views
1

尝试将模型类的DateField用作另一个模型类的ForeignKey并且在两个类上使用默认设置为today时出现问题。该错误信息是:Django Models:使用DateField作为ForeignKey时出错

django.core.exceptions.ValidationError: ["'self.date' value has an invalid date format. It must be in YYYY-MM-DD format."]

代码:

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类中,然后将该图像显示为主页上的标题,并在当日创建的日记条目的页面上显示标题。创建日记帐分录时,应自动引用当天创建的图像。

壳测试它,日期字段似乎匹配,但格式为: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

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

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

您还可以设置在settings.py

DATETIME_FORMAT = 'Y-m-d' 

默认日期时间格式但是我不知道这将是在您的情况的解决方案。

+0

感谢您的快速回答。这些似乎都不适合我。相反,我创建了一个新变量today = datetime.today.strftime(“%Y-%m-%d”)并将其分配给图像字段: > image = models.ForeignKey(DailyImage,to_field ='date' ,默认='今天') 还没有测试过它,看看它是否正常工作,但到目前为止它看起来不错 – user2339709

+0

我认为你应该忽略'to_field ='date''(和默认值),它会通过'id'自动链接。你在做什么是非常罕见的。然后,您也可以忽略该图像的日期,因为它已通过日记帐可用。 – FeedTheWeb

+0

而在此时,为什么不使用OneToOneField而不是Foreignkey(=一对多)。 – FeedTheWeb