0
from django.db import models 

class Reporter(models.Model): 
    pass 

class Article(models.Model): 
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE, null=True) 

Теперь всякий раз, когда я добавить статью к репортеру (как показано ниже), я хочу, чтобы запустить пользовательский код, какой метод следует переопределить (без изменения bulk=True)?Выполнить пользовательский код при добавлении к Many-To-One отношения

>>> new_article = Article.objects.create() 
>>> new_reporter = Reporter.objects.create() 
>>> new_reporter.article_set.add(new_article, bulk=True) 

ответ

0

Ответ будет зависеть от того, как создавать объекты в вашем приложении, это будет запускать код в первый раз, когда статья добавляется к репортеру

class Article(models.Model): 
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) 

    def save(self, *args, **kwargs): 
     if self.reporter: 
      if not self.reporter.article__set: 
       #do your code here 
     super(Article, self).save(*args, **kwargs) 

Это будет работать код, если статья на репортер меняет

class Article(models.Model): 
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) 

    def save(self, *args, **kwargs): 
     if self.reporter: 
      if not self.reporter.article__set is self: 
       #do your code here 
     super(Article, self).save(*args, **kwargs) 

не проверял, но логика кажется звук

+0

спасбросков метод не выполняется при запуске примера, который я предоставил –

+0

@OskarPersson метод create является ярлыком для создания и сохранения, а также создание статьи без репортера должно дать ошибку – Mojimi

+0

Вы правы, это должно быть. Я обновил модель статьи, при этом поле репортера становится нулевым. –

 Смежные вопросы

  • Нет связанных вопросов^_^