1

모델 클래스의 DateField를 다른 모델 클래스의 ForeignKey로 사용하려고 할 때 문제가 발생하고 두 클래스에서 today를 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 클래스에 추가합니다. 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 객체를 반환하지만 형식을 설정해야합니다. 또한

DATETIME_FORMAT = 'Y-m-d' 

settings.py

의 기본 날짜 형식을 설정할 수

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

그러나 나는 그 상황에서 해결책이 될 것입니다 확실하지 않다.

+0

빠른 답변 감사드립니다. 이 중 아무 것도 나를 위해 일하는 것처럼 보였다. 대신에 새로운 변수 today = datetime.today.strftime ("% Y- % m- % d")을 만들고 이미지 필드에 할당했습니다. > 이미지 = models.ForeignKey (DailyImage, to_field = 'date' , default = 'today') 아직 제대로 작동하는지 테스트하지 못했지만 지금까지는 괜찮아 보입니다. – user2339709

+0

'to_field ='date '' (기본값)를 생략해야한다고 생각합니다. 'id '로 자동 연결됩니다. 당신이하는 일은 매우 드문 일입니다. 그런 다음 저널을 통해 이미 사용할 수 있으므로 이미지 날짜를 생략 할 수도 있습니다. – FeedTheWeb

+0

그리고 Foreignkey (= one to many) 대신 OneToOneField를 사용하십시오. – FeedTheWeb