Как сохранить/создать тысячи записей в postgres с помощью queryset в Django?

Я хочу хранить тысячи записей в таблице ''Student'', которая имеет поле внешнего ключа ''id_s2_users''. Я пробовал без внешнего ключа, он работает гладко, но когда я добавил ограничение fk, он становится очень медленным и занимает более 20 минут для хранения 500 записей, а то же самое без fk занимает всего несколько секунд.

модели - Ниже представлены модели из разных приложений

./users/models.py

class Users(models.Model):
    id = models.IntegerField(primary_key=True)
    cts = models.DateTimeField(blank=True, null=True)
    uts = models.DateTimeField(blank=True, null=True)
    id_states = models.ForeignKey(States, models.DO_NOTHING, db_column='id_states', blank=True, null=True)
    id_user_type = models.ForeignKey(UserType, models.DO_NOTHING, db_column='id_user_type')
    firstname = models.TextField(blank=True, null=True)
    lastname = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'users'

./student/models.py

class Student(models.Model):
    id = models.BigAutoField(primary_key=True)
    cts = models.DateTimeField()
    uts = models.DateTimeField()
    id_users = models.ForeignKey('users.Users', models.DO_NOTHING, db_column='id_users')
    num_subjects = models.IntegerField()
    num_teachers = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'students'

методbulk_create() -

def saveCounts(cumulative_counts: pd.DataFrame, model: django.db.models.base.ModelBase) -> None:
    records = cumulative_counts.to_dict('records')
    model_instances = [model(
        cts=timezone.now(),
        uts=timezone.now(),
        id_users=Users.objects.get(
            id=record['id_users']),
        num_subjects=record['num_subjects'],
        num_teachers=record['num_teachers'],
    ) for record in records]

    model.objects.bulk_create(model_instances)
Вернуться на верх