В настоящее время я делаю приложение Todo, у меня есть несколько Todolist, каждый из которых может содержать несколько задач, вот как я сделал свои модели:
class Todo(models.Model):
name = models.CharField(max_length=120)
total_tasks = models.IntegerField(default=0)
completed_tasks = models.IntegerField(default=0)
def update_total_tasks(self):
self.total_tasks = self.task_set.all()
def _str_(self):
return self.name
class Task(models.Model):
name = models.CharField(max_length=120)
completed = models.BooleanField(default=False)
todo = models.ForeignKey(Todo, on_delete=models.CASCADE, related_name="tasks")
Моя задача содержит все текущие и завершенные задачи. функция update_total_tasks
предназначена для запроса всех задач, связанных с этим конкретным делом, и соответствующего обновления поля.
Эта функция вызывается каждый раз, когда задача создается / обновляется с помощью:
@receiver(models.signals.post_save, sender=Task)
def execute_after_save(sender, instance, created, *args, **kwargs):
instance.todo.update_total_tasks()
Приемник работает и правильно вызывает мою функцию обновления, хотя кажется, что запрос сделан неправильно, потому что я получаю эту ошибку:
AttributeError: 'Todo' object has no attribute 'task_set'
У вас есть идеи, почему она не работает должным образом?
Спасибо.