La relación de muchos a muchos de Django no funciona

Estoy usando ManyToManyField de Django para uno de mis modelos.

class Requirement(models.Model):
    name = models.CharField(max_length=200)


class Course(models.Model):
    requirements = models.ManyToManyField(Requirement)

Quiero poder asignar requisitos para mis clases, así que para hacer eso, intento lo siguiente: obtengo una clase, curso, que ya está guardado o que acabo de guardar, y ejecuto lo siguiente:

c = Course.objects.get(title="STACK 100")
req = Requirement.objects.get(name="XYZ")
c.requirements.add(req)

Si bien esto funciona cuando lo hago a través del shell Django manage.py, no funciona cuando lo hago programáticamente en un script. Trabajo con otros modelos en este script y todo funciona bien. E incluso sé que recupera con éxito el curso actual y el requisito cuando verifico ambos. ¡No puedo entender cuál es el problema!

EDITAR:

Lo que quiero decir con no trabajar es que el campo de requisitos del curso permanece vacío. Por ejemplo, si hago c.requirements.all (), obtendré una lista vacía. Sin embargo, si hago este enfoque a través del shell, la lista se completará. El script es un rastreador que usa BeautifulSoup para rastrear un sitio web. Intento agregar requisitos a los cursos en la siguiente función:

def create_model_object(self, course_dict, req, sem):
    semester = Semester.objects.get(season=sem)

    #Checks if the course already exists in the database
    existing_matches = Course.objects.filter(number=course_dict["number"])
    if len(existing_matches) > 0:
        existing_course = existing_matches[0]

        if sem=="spring":
            existing_course.spring = semester
        else:
            existing_course.fall = semester
        existing_course.save()
        c = existing_course

    #Creates a new Course in the database
    else:
        if sem == "spring":
            new_course = Course(title=course_dict["title"],
                        spring=semester)
        else:
            new_course = Course(title=course_dict["title"],
                        fall=semester)
        new_course.save()
        c = new_course

    curr_req = Requirement.objects.get(name=req)
    c.requirements.add(curr_req)
    print(c.id)

EDITAR 2:

Después de entrar en la función, esto es lo que encontré:

def __get__(self, instance, instance_type=None):
    if instance is None:
        return self

    rel_model = self.related.related_model

    manager = self.related_manager_cls(
        model=rel_model,
        query_field_name=self.related.field.name,
        prefetch_cache_name=self.related.field.related_query_name(),
        instance=instance,
        symmetrical=False,
        source_field_name=self.related.field.m2m_reverse_field_name(),
        target_field_name=self.related.field.m2m_field_name(),
        reverse=True,
        through=self.related.field.rel.through,
    )

    return manager

Y según mi depurador, el administrador es de tipo planificador (el nombre de mi proyecto) .Curso.Ninguno.

Respuestas a la pregunta(0)

Su respuesta a la pregunta