У меня есть следующие модели:
class Case(models.Model):
title = models.CharField(verbose_name="Titre", max_length=1000)
statement = models.CharField(verbose_name="Énoncé du problême", max_length=1000)
class GivenCase(models.Model):
given_case = models.ForeignKey(Case, on_delete=models.CASCADE)
title = models.CharField(verbose_name="Titre", max_length=1000, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
class Candidate(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
cases = models.ManyToManyField(GivenCase, verbose_name="Cas", related_name="cases", blank=True)
assigned_cases = models.ManyToManyField(Case, verbose_name="Cas assignés", related_name="assigned_cases")
Проще говоря, у меня есть Кандидаты, которые могут иметь несколько Случаев, каждый раз, когда Случай назначается Кандидату, сигнал обрабатывается, а GivenCase создается и назначается Кандидату.
Вот мой обработчик сигнала:
@receiver(models.signals.post_save, sender=Candidate)
def generate_exercise_for_new_user(sender, instance, **kwargs):
cases = Case.objects.all()
assigned_cases = GivenCase.objects.filter(user=instance.user).values_list("title", flat=True)
for case in cases:
if case.title not in assigned_cases:
new_case = GivenCase(title=case.title, given_case=case, user=instance.user)
new_case.save()
instance.cases.add(new_case)
if new_case in instance.cases.all():
print("ITS HERE")
моя проблема в том, что когда я делаю изменения в кандидате в виде администратора, код сигнала срабатывает (проверяется с отпечатками), и новый_каталог сохраняется в моем поле M2M (последний, если в конце сигнала возвращается значение true), несмотря на все это, когда я возвращаюсь к своему кандидату после сохранения изменений, никакие GivenCase не сохраняются внутри него, несмотря на то, что они созданы (они видны в доступном случае, но, поскольку я добавил их ранее, я ожидаю, что они будут автоматически в выбранном случае.
Кажется, что это не дает сбоя, похоже, что все изменения стираются после окончания обработчика сигнала, у кого-нибудь есть идеи?