Estoy haciendo el mismo ejercicio en este momento. El enfoque que he tomado es crear una lista de nuevos objetos del DataFrame y luego crearlos de forma masiva:
bulk_create(objs, lote_tamaño=Ninguno)
Este método inserta la lista de objetos proporcionada en la base de datos de manera eficiente (generalmente solo 1 consulta , no importa cuántos objetos haya)
Un ejemplo podría verse así:
# Not able to iterate directly over the DataFrame
df_records = df.to_dict('records')
model_instances = [MyModel(
field_1=record['field_1'],
field_2=record['field_2'],
) for record in df_records]
MyModel.objects.bulk_create(model_instances)