2014-05-08 1 views
1

나는 sequence라는 자동 증가 필드를 가지고있다. 이 모델이 속한 주제 내에서 1 씩 증가 시키길 원합니다. 일반적으로 가장 큰 것은 10입니다. 그런 다음 새 주제를 재설정합니다. 나는 이것이 저장 재정의 방법으로 수행 할 수 싶습니다 : 여기 내 코드각 카테고리 내에서 필드를 자동으로 증가 시킵니까?

class Video(TimeStampedModel): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=200) 
    description = models.CharField(max_length=500) 
    topic = models.ForeignKey('video.VideoTopic') 
    sequence = models.IntegerField(default=1) 

    def save(self, *args, **kwargs): 
     # Get last value of sequence and increment by 1 
     top = Video.objects.order_by('-sequence')[0] 
     self.sequence = top.sequence + 1 
     super(Video, self).save() 

문제가 "최고"단지 가장 높은 번호의 순서에 비디오를 얻을 것이다 저장 방법입니다.

내 쿼리를 올바르게 필터링하기 위해 저장되는 비디오 항목을 어떻게 얻을 수 있습니까?

답변

1

self.topic에서 가져 오기 :

top = Video.objects.filter(topic=self.topic).latest('sequence') 

을이 경우 latest()에서 단일 Video 모델 인스턴스를 얻을 것입니다 :

top = Video.objects.filter(topic=self.topic).order_by('-sequence')[0] 

당신은 대신 정렬과의 검색어에서 [0]을 복용 latest()을 사용할 수 있습니다 특정 주제에 대해 최대 값이 sequence입니다.

다음을 참조하십시오 : Overriding predefined model methods.

+0

최고, 감사합니다! 내가 함께 결국 : sequence_number = 1 최고 = Video.objects.filter (주제 = self.topic) .latest ('순서') top.sequence 경우 : sequence_number = top.sequence + 1 self.sequence = sequence_number super (비디오, 자체) .save() – Renkai