post_save в django для обновления экземпляра сразу

Вы можете попробовать эту функцию:

function textToArray(){
  var someArray = [];    
  var nameList = $("#txtArea").val();

  $.each(nameList.split(/\n/), function (i, name) {     

      // empty string check
      if(name != ""){

          someArray.push(name);

      }        
});

взято из: КОНВЕРТ TEXTAREA СОДЕРЖИТСЯ ДЛЯ Массива с использованием JQUERY

11
задан givp 28 October 2009 в 23:15
поделиться

2 ответа

Когда вы обнаружите, что используете сигнал post_save для обновления объекта класса отправителя, скорее всего, вы должны вместо этого переопределить метод сохранения. В вашем случае определение модели будет выглядеть так:

class Test(models.Model):
    title = models.CharField('title', max_length=200)
    blah = models.CharField('blah', max_length=200)

    def save(self, force_insert=False, force_update=False):
        if not self.blah:
            self.blah = 'hello'
        super(Test, self).save(force_insert, force_update)
19
ответ дан 3 December 2019 в 04:13
поделиться

Разве обработчик post_save не берет экземпляр? Почему вы фильтруете с его помощью? Почему бы просто не сделать:

def my_handler(sender, instance=False, created, **kwargs):
  if created:
     instance.blah = 'hello'
     instance.save()

Ваш существующий код не работает, потому что он зацикливается, а Test.objects.filter (id = instance.id) возвращает набор запросов, а не объект. Чтобы получить один объект напрямую, используйте Queryset.get () . Но здесь этого делать не нужно. Аргумент created не дает ему зацикливаться, так как он устанавливает его только в первый раз.

В общем, если вам абсолютно не нужно использовать сигналы post_save, вы все равно должны переопределить метод save () вашего объекта.

6
ответ дан 3 December 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: