Временные экземпляры модели, на которые ссылаются как на внешние ключи

Существует ли способ сохранить экземпляр модели Django, на который ссылаются внешние ключи, в памяти, не сохраняя его в базе данных?

Код является частью перегрузки _add_, но то, как это реализовано сейчас, очень некрасиво, поскольку трудно отслеживать новые экземпляры, и это также производит много ненужных обращений к БД. В идеале я хочу, чтобы новые экземпляры оставались временными до тех пор, пока пользователь не вызовет метод save() для возвращенного экземпляра.

Когда я не комментирую вызовы save(), как показано ниже, экземпляры аннотаций не ссылаются в возвращаемом экземпляре Sequence.

class Sequence(models.Model):
...
    def __add__(self, other:'Sequence'):
        """
        This enables you to use the + operator when dealing with Sequence objects
        :param other:
        :return:
        """
        sum_seq = Sequence()
        
        # concatenate the actual sequences
        sum_seq.sequence = self.sequence + other.sequence

        #sum_seq.save()
        len_self_seq = len(self.sequence)

        # annotations
        annot: SequenceAnnotation
        # copy the own anntotations
        for annot in self.annotations.all():
            new_annot = deepcopy(annot)
            new_annot.id = None  # this is crucial to actually create a new instance
            new_annot.ref_sequence = sum_seq
            #new_annot.save()

        if other_is_bioseq:
            # copy the other annotations, adjust the start and end positions
            for annot in other.annotations.all():
                new_annot = deepcopy(annot)
                new_annot.id = None  # this is crucial to actually create a new instance
                new_annot.start = len_self_seq + annot.start
                new_annot.end = len_self_seq + annot.end
                new_annot.ref_sequence = sum_seq
                #new_annot.save()

        return sum_seq

Нет, насколько я знаю.

Поля внешних ключей в Django поддерживаются полями something_id; присвоение foo.something чему-то, что имеет None id устанавливает поддерживающее поле в None.

Вам нужно будет реализовать что-то похожее на то, как формы (возможно) имеют save_m2m() для обеспечения сохранения созвездия объектов в правильном порядке.

Вернуться на верх