Поле Django ManytoMany остается пустым после вызова метода .add()
Привет всем, я использую django для создания платформы регистрации, где студенты могут записываться на еженедельные занятия. Каждый класс представляет собой модель django под названием ClassCards с полем User manytomany под названием signed_up_student, которое представляет всех пользователей, записавшихся на этот класс, как показано ниже
'''
class ClassCards(models.Model):
content = models.CharField(max_length=100, default = '')
date = models.DateField(blank=True, null = True)
time = models.TimeField(blank=True,null=True)
signed_up_students = models.ManyToManyField(User,blank=True)
full = models.BooleanField(default = False)
max_students = models.IntegerField(default=4)
teacher = models.CharField(max_length=100, default='Adi')
'''
Я хотел бы добавить опцию подписки, которая будет автоматически записывать подписавшихся студентов на занятия этой недели. Вот моя модель подписки:
'''
class Subscriptions(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null =True)
day = models.CharField(max_length=100, choices=day_choices, null=True)
time = models.TimeField(blank=True, null=True)
num_of_times_used = models.IntegerField(default=0)
cap = models.IntegerField(default=52)
active = models.BooleanField(default= True)
expirey_date = models.DateField()
date_created = models.DateField(default = timezone.now)
'''
Для достижения этой цели я создал сигнал post_save:
'''
@receiver(post_save,sender=ClassCards)
def apply_subsciptions(sender,instance,created, **kwargs):
if created:
subs = Subscriptions.objects.filter(day=instance.date.strftime("%A"),
time=instance.time)
for s in subs:
instance.signed_up_students.add(s.user)
print(instance.signed_up_students.get())
''' Код работает правильно, когда ClassCard сохраняется без ошибок, и оператор печати печатает соответствующего пользователя. Однако, когда я смотрю на страницу администратора, я вижу, что в поле signed_up_students нет пользователей. Хотелось бы понять, почему это не работает так, как хотелось бы, и добавить пользователя в поле manytomany. И хотелось бы услышать любую информацию о том, что является лучшей практикой для автоматического обновления поля manytomany. Спасибо
небольшая модификация класса ClassCards
class ClassCards(models.Model):
signed_up_students = models.ManyToManyField(User, symmetrical=False, related_name="student_cards_students_has", blank=True)
def signed_students_list(self):
return self.signed_up_students.all()
def cards_asigned_to_student_list(self):
return self.student_cards_students_has.all()
def assign_student(self, user):
self.signed_up_students.add(user)
def unsign_user(self, user):
self.signed_up_students.remove(user)
сейчас в сигналах
@receiver(post_save,sender=ClassCards)
def apply_subsciptions(sender,instance,created, **kwargs):
if created:
subs = Subscriptions.objects.filter(day=instance.date.strftime("%A"),time=instance.time)
for s in subs:
instance.assign_student.add(s.user)
print(instance.signed_students_list())
print(instance.cards_asigned_to_student_list())