2017-01-31 5 views
0

모두가 나에게주고는 :TimeField 및 DurationField INT 오류

return int(round(value.total_seconds() * 1000000)) 
AttributeError: 'int' object has no attribute 'total_seconds' 

나는 그러나 단지이 사이트에서이 오류를 보았다 장고 1.8. 현재 장고 1.10을 사용하고 있습니다. 나는이 suggesions을 시도 : Prakhar Trivedi의 질문에 주소

class SomeModel(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    lunchnumber = models.IntegerField(null=True, blank=True) 
    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES,null=True, blank=True) 
    breaktime = models.DurationField(default=timedelta(minutes=45)) 

    def to_python(self, value): 
     if value is None: 
      return value 
     if isinstance(value, datetime.timedelta): 
      return value 
     try: 
      parsed = parse_duration(value) 
     except ValueError: 
      pass 
     else: 
      if parsed is not None: 
       return parsed 

:

DurationField(default=timedelta()), 
DurationField(), 
DurationField(default=timedelta()), 
DurationField(default=int(timedelta(minutes=20).total_seconds())). 

내 모델은 현재처럼 보이는 내가 잘 작동하지 않습니다 어떤 값을 모른다. 나는 그것이 장고가 데이터베이스 테이블을 채우려 고 시도하는 기본 값이라고 가정했다. 나는 get_db_prep_value에 ....... 때문에 의 인상 (원형 (value.total_seconds() * 1000000)) AttributeError를 반환 INT입니다 : 'INT'개체가 어떤 속성 'total_seconds'

이 주소가 없습니다 iklinac의 답변 :

나는 기본값 = timedelta (분 = 45)를 추가했습니다. 나는 그것을 datetime에서 수입 해달라고한다 그러나 나는 나가 무언가를 놓치고 있다는 것을 느낀다. 나는 이것에 아주 새롭다 to_python 기능을 보지 않았다. 나는 무엇이 없는가 나는 아직도 동일한 과실을 얻고 있는가? 당신이 경우

+0

** value value는 total_seconds() **에 ** value **입니다. UR 모델의 가치는 어느 분야입니까 ?? –

+1

우 @PrakharTrivedi 그게 내가 물어 봐야했던 것, 내가 다른 것 묻는 것 같아 :) – e4c5

+0

안녕하세요 트래비스는 models.py에서 아래 명시된 방식으로 가져온 timedelta를 확인 했습니까? Duration 필드 뒤의 함수 인 to_python 함수에 대해서도이를 포함 할 필요가 없습니다. 마지막 부분에 대해서도 datetime이 여전히 문제가 있다면 django 시간 형식을 parse_value의 주석 섹션에 사용하십시오 – iklinac

답변

0

당신이 날짜 패키지 :)에서 timedelta를 가져 오는 경우

from datetime import timedelta 

는이 두 DurationField의

DurationField(default=timedelta(minutes=20)) 
DurationField(default=timedelta()) 

to_python 기능을 작동합니다 확인하시기 바랍니다 것은

if value is None: 
     return value 
    if isinstance(value, datetime.timedelta): 
     return value 
    try: 
     parsed = parse_duration(value) 
    except ValueError: 
     pass 
    else: 
     if parsed is not None: 
      return parsed 

을 따르고 여전히 timedelta에 문제가 있으면 pa에서 설명한 것처럼이 형식 중 하나를 사용할 수 있습니다. rse_duration 코드 설명

def parse_duration(value): 
    """Parses a duration string and returns a datetime.timedelta. 

    The preferred format for durations in Django is '%d %H:%M:%S.%f'. 

    Also supports ISO 8601 representation. 
    """ 
    match = standard_duration_re.match(value) 
    if not match: 
     match = iso8601_duration_re.match(value) 
    if match: 
     kw = match.groupdict() 
     if kw.get('microseconds'): 
      kw['microseconds'] = kw['microseconds'].ljust(6, '0') 
     kw = {k: float(v) for k, v in six.iteritems(kw) if v is not None} 
     return datetime.timedelta(**kw)