u
24 сентября 2019 г. 20:08

При создании/обновлении Article обновлять и Section up_date

Всем привет! Может кто-то уже сталкивался с подобным....
Надо (пока для меня непонятно как) при создании/обновлении Article обновлять и Section up_date
Возможно ли такое сделать?

  1. class Section(models.Model):
  2. class Meta:
  3. verbose_name = 'тратата'
  4. verbose_name_plural = 'трататы'
  5.  
  6. title = models.CharField('Название', max_length=150)
  7. slug = models.SlugField('URL', null=True, blank=True, unique=True)
  8. description = models.TextField('Описание категории', null=True, blank=True)
  9. image = models.ImageField ('картинка', upload_to='images/')
  10. pub_date = models.DateTimeField(auto_now_add=True)
  11. up_date = models.DateTimeField(auto_now=True)
  12.  
  13. def __str__(self):
  14. return self.title
  1. class Article(models.Model):
  2. class Meta():
  3. verbose_name = 'апвапва'
  4. verbose_name_plural = 'вапвв'
  5.  
  6. title = models.CharField('Название', max_length=150)
  7. slug = models.SlugField('URL', null=True, blank=True, unique=True)
  8. meta_description = models.CharField('meta_description', max_length=150, null=True, blank=True)
  9. section = models.ForeignKey('Section', on_delete=models.CASCADE)
  10. image = models.ImageField ('Изображение', upload_to='img/')
  11. dl = models.FileField ('Архив', upload_to='dl/')
  12. content_field_1 = models.CharField('', null=True, blank=True, max_length=150)
  13. pub_date = models.DateTimeField(auto_now_add=True)
  14. updated = models.DateTimeField(auto_now=True)
  15.  
  16. # Тут проблемка (как я пытался это сделать)
  17. def save(self, *args, **kwargs):
  18. self.section.up_date = self.updated
  19. super(Section, self).save(*args, **kwargs)
  20.  
  21.  
  22. def __str__(self):
  23. return self.title
2

Вам это нравится? Поделитесь в социальных сетях!

2
Илья Чичак
  • 24 сентября 2019 г. 20:32
  • (ред.)
  • Ответ был помечен как решение.

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

  1. def save(self, *args, **kwargs):
  2. self.section.up_date = self.updated
  3. self.section.save()
  4. super(Section, self).save(*args, **kwargs)

еще вариант:
поскольку у вас есть параметр "auto_now=True", можно просто вызывать метод "save()" модели "Section":

  1. def save(self, *args, **kwargs):
  2. self.section.save()
  3. super(Section, self).save(*args, **kwargs)

с этим параметром в момент сохранения автоматически подставляется время сохранения

и последний вариант:
если вы хотите только показывать это значение, но не планируете по нему сортировать, можно сделать метод-свойство:

  1. class Section(models.Model):
  2. ...
  3.  
  4. @property
  5. def up_date(self):
  6. return self.articles_set.order_by('update').first().update

тогда при обращении к "Section.up_date" будет возвращаться значение update самой свежей "Article".
а если всетаки надо сортировать по этому полю - можно это сделать так:

  1. Section.objects.all().order_by('article_set__update')
    u
    • 24 сентября 2019 г. 20:50

    Огромное спасибо!
    За несколько вариантов отдельное спасибище :)

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь
      • Последние комментарии
      • Evgenii Legotckoi
        16 апреля 2025 г. 17:08
        Благодарю за отзыв. И вам желаю всяческих успехов!
      • IscanderChe
        12 апреля 2025 г. 17:12
        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
      • AK
        1 апреля 2025 г. 11:41
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        9 марта 2025 г. 21:02
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        9 марта 2025 г. 16:14
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…