Как создать модель используя receiver
Есть две модели : Project ( Проекты ) и Criteria ( критерии оценивания Проекта). Нужно, чтобы при создании проекта через форму, сразу с ним создавались и критерии к нему. Хочу сделать это через receiver, но вылетает ошибка 'Project' object has no attribute 'Criteria'
#models.py
class Project(models.Model):
user = ForeignKey(settings.AUTH_USER_MODEL, on_delete=CASCADE)
name = CharField(_("Название проекта"), max_length=150, db_index=True)
site = URLField(_("Ссылка на сайт проекта"), max_length=200)
description = TextField(_("Описание продукта/сервиса"))
note = CharField(_("Примечание к проекту"), max_length=150, db_index=True)
responsible = CharField(_("Ответственный"), max_length=150, db_index=True)
data_create = DateTimeField(_("Время создания"), auto_now_add=True)
def __str__(self):
return self.name
class Criteria(models.Model):
app = ForeignKey(Project, on_delete=CASCADE, default=None)
science = BooleanField(_("Есть наука"), default=False)
interesting = BooleanField(_("Интересный"), default=False)
difficult = BooleanField(_("Сложный"), default=False)
unclear = BooleanField(_("Непонятный"), default=False)
repeat = BooleanField(_("Повтор"), default=False)
@receiver(post_save, sender=Project)
def create_criteria(sender, instance, created, **kwargs):
Criteria.objects.create(app=instance)
@receiver(post_save, sender=Project)
def save_criteria(sender, instance, **kwargs):
instance.criteria.save()
Ответы (1 шт):
Автор решения: SkyAdam
→ Ссылка
Receiver не должен быть методом класса, так что его нужно вынести из под него
@receiver(post_save, sender=Project)
def create_criteria(sender, instance, created, **kwargs):
Criteria.objects.create(app=instance).save()