2017-05-02 4 views
1

관리자가 추가로 잊어 버린 경우 시리즈의 첨가 후, 의 수는 시리즈는 자동 방식으로 추가 할 필요가있다 : 우리가 을 거기에서 우리가 마지막으로 생성 된 시리즈을 시리즈 번호를 추가하고이 번호에 시리즈 1의 번호를 추가하고 을 시리즈에 추가하십시오!신호 오류 Post_Save 및 Pre_Save : created 및 self! 어떻게 고치는 지?

1)이

인수 "자기"부족 그것은 여전히 ​​작동하지 않습니다 알려진 )하지 않고, 전혀 왜 거기에 있지만 (추가 :하지만 지속적으로 이러한 오류를 vylazyut !

이 내 모델과 신호

class Series(models.Model): 
    id           = models.AutoField(primary_key=True) 
    rus_name         = models.CharField(max_length=60) 
    eng_name         = models.CharField(max_length=60) 
    slug          = models.SlugField(unique=False) 
    serial_of_this_series      = models.ForeignKey(Serial, on_delete=models.CASCADE, default=True) 
    season_of_this_series      = models.ForeignKey(Season, on_delete=models.CASCADE, default=True) 
    number_of_series       = models.IntegerField(default=0, blank=True, null=True) 
    description         = models.TextField(max_length=700, blank=True, default=None) 
    size_of_torent_file       = models.CharField(max_length=60, default=None) 
    link_for_dowloand_serie_in_quality_360p  = models.CharField(max_length=60, default=None)  
    link_for_dowloand_serie_in_quality_720p  = models.CharField(max_length=60, default=None)  
    link_for_dowloand_serie_in_quality_1080p = models.CharField(max_length=60, default=None)  
    rating          = models.FloatField(default=0, blank=True) 
    is_active         = models.BooleanField(default=True) 
    timestamp_rus        = models.DateField(auto_now_add=True, auto_now=False) 
    updated          = models.DateTimeField(auto_now_add=False, auto_now=True) 
    timestamp_eng        = models.CharField(max_length=60) 
    time_of_series        = models.DecimalField(max_digits=10, decimal_places=2, default=42) 



    def get_absolute_url(self): 
     return reverse('series:post_of_serie', kwargs= 
         {'serial_slug': self.serial_of_this_series.slug, 
         'season_slug': self.season_of_this_series.slug, 
         'series_slug': self.slug}) 

    def __str__(self): 
     return "%s | %s" % (self.rus_name, self.number_of_series) 


    class Meta: 
     ordering        = ["-timestamp_rus"] 
     verbose_name       = 'Series' 
     verbose_name_plural      = 'Series' 


def series_change_number(sender, **kwargs): 
    ser           = Series.objects.last() 
    change          = ser.number_of_series 
    number          = int(change) + 1 
    series          = Series 
    series.number_of_series      = number 
    series.save(force_update=True) 

pre_save.connect(series_change_number, sender=Series) 
+0

series_change_number 함수에서 "created"매개 변수를 제거하십시오. –

+1

save() missing 1 필수 위치 인수 : 'self' –

+1

함수에서 새 Series 객체를 만들거나 동일한 위치에서 업데이트 하시겠습니까? –

답변

0

는 확인이 작업을 수행 :

def series_change_number(sender, instance, **kwargs): 
    ser = Series.objects.last() 
    change = ser.number_of_series 
    number = int(change) + 1 
    instance.number_of_series = number 

pre_save.connect(series_change_number, sender=Series) 

제공하는 새 모델 객체를 업데이트 할 찾고 있습니다.

+0

"최대 재귀 깊이 초과"에 대한 새 오류 –

+0

instance.save 제거 (force_update = True) –

+0

이 줄은 다시 pre_save 신호를 호출하므로 최대 깊이 문제 –

0

그런 식으로 코드를 정렬하지 마십시오입니다; 그것은 읽는 것을 매우 어렵게 만듭니다.

귀하의 문제는 (공간을 제거) 여기에 있습니다 : 그냥 시리즈 클래스 series 다른 이름을 만드는

series = Series 

. 당신은 그것을 인스턴스화하지 않습니다; 그렇게하기 위해서는 실제로 그것을 호출해야합니다.

series = Series() 

... 실제로 원하는 것으로 가정합니다. 그것은 당신의 코드에서 명확하지 않다.

+0

오케이, 어떻게해야합니까? 신참을 도울 수 있습니까? 그리고 나는 새로운 에러를 얻는다. "series = Series()"를 사용하여 @ 최대 재귀 깊이를 초과했다. –

+0

내가 말했듯이, 당신이하려고하는 것을 정확히 설명 할 필요가있다. 이 코드는 새 Series가 만들어 질 때 호출됩니다. 신호가 호출되는 인스턴스의 번호를 업데이트하려고합니까? –

+0

@DanielRoseman 그가 찾고있는 것은 최근에 저장 한 개체를 저장하고있는 현재 데이터베이스 모델의 number_of_series를 업데이트하는 것입니다. –