u
Sept. 24, 2019, 8:08 p.m.

При создании/обновлении 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

Do you like it? Share on social networks!

2
Илья Чичак
  • Sept. 24, 2019, 8:32 p.m.
  • (edited)
  • The answer was marked as a solution.

смотрите, у вас не получается, поскольку в методе 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
    • Sept. 24, 2019, 8:50 p.m.

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

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup