2016-07-09 2 views
0


에 장고 모델 변수 친척이, 그리고 나는 붙어 :(나는 새로운 프로젝트를 시도 장고 안돼서 다른

을 나는 비디오 모델이 어떻게 :

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

을 나는 것처음에는 템플릿에서 생성하려고했지만, jinja에서 파이썬을 사용할 수 없다는 것을 발견했습니다 (예 ... 장고를 처음 사용함). 그런 다음 추가 변수를 모델에 직접 넣으려고했지만 아무 것도 작동하지 않았습니다.

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

    image_source = 'http://img.youtube.com/vi/'+ str(link.split('=')[1]) +'/maxresdefault.jpg' 

어떻게하면됩니까?

미리 감사드립니다.

답변

2

Django 모델의 속성을 설정하는 것은 한 가지 방법입니다. 데이터베이스에서이 이미지 URL을 저장할 필요가없는 경우, 다음을 수행 할 수 있습니다 : 당신이 정말로 데이터베이스에이를 저장해야하는 경우

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

    @property 
    def image_source(self): 
     return 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg' 

, 그건 너무 괜찮아요! 이 클래스의 save() 메소드를 다음과 같이 재정의 (override) 할 수 있습니다.

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 
    image_source = models.CharField(max_length=250, blank=True) 

    def save(self, *args, **kwargs): 
     # ensure image_source is always updated 
     self.image_source = 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg' 

     super(Video, self).save(*args, **kwargs) 
+0

대단히 감사합니다. @property는 일반적인 방법에서 무엇이 변경됩니까? – AimiHat

+1

메서드를 호출하는 대신 필드처럼 모델의 속성을 참조 할 수 있습니다. (예 : video.image_source vs. video.image_source()). 실제로 속성은 일반적으로 고정적이며 많은 (필요한 경우) 매개 변수화가 필요없는 간단한 데이터 변환에 일반적입니다. CSV로 저장 한 필드가 있고 목록으로 대신 액세스하려는 경우를 생각해보십시오. 모델에 속성을 정의하면 데이터에 액세스해야 할 때 원시 필드 대신 속성을 사용합니다. – Xopherus

관련 문제