信号 Post_Save 和 Pre_Save 出错:已创建并自行创建!怎么修?

Error with Signals Post_Save and Pre_Save: created and self! how to fix?

It is necessary that after the addition of the series, the number of the series is automatically added, if the administrator forgets to add, in this way: we take the last created series, from there we take the series number, and add to this the number of the series 1, and add to our series! But constantly vylazyut such errors as:

1) 缺少

argument "self", add it (although why it is there at all, it is not known) and still does not work!

这是我的模型和信号

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)

请不要这样排列您的代码;这让阅读变得非常困难。

你的问题在这里(删除空格):

series = Series

这只是 series 系列 class 的另一个名称。您永远不会实例化它;为此,您需要实际调用它。

series = Series()

...假设这实际上是您想要做的;从你的代码中看不清楚。

好的,这样做:

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)

前提是您要更新新模型对象。