Django4: Создание объекта для третьей модели для каждого элемента в отношении "многие ко многим

Возможно, этот вопрос слишком сложен для Stackoverflow, дайте мне знать, если есть более подходящий форум для такого рода вопросов.

У меня есть три модели, которые зависят друг от друга. Мне нужен механизм, который создает результат для каждого элемента в Pipeline.ms_file. Когда я назначаю файл на конвейер, он должен быть обработан и должен быть создан объект Results. Когда я удаляю файл из конвейера, экземпляр Result должен быть удален. Возможно, это можно сделать с помощью сигналов. Хотя это будет немного некрасиво, когда файл удаляется из конвейера. Мне пришлось бы перебирать все результаты и определять те, которые теперь недействительны. Интересно, есть ли лучший способ сделать это? Может быть, мне вообще не стоит использовать поле ManyToMany в этой ситуации?

На самом деле ситуация немного сложнее. На самом деле, список целей назначается конвейеру, а при создании файла создается результат для каждой комбинации целей и файлов. Основной проблемой является удаление, поскольку при сохранении экземпляра конвейера информация об удаленных файлах исчезает.

class MsFile(models.Model):
    name = models.CharField(max_length=300)
    instrument = models.ForeignKey(Instrument, on_delete=models.SET_NULL, null=True)
    method = models.ForeignKey(Method, on_delete=models.CASCADE, null=True)   
    # file = models.FileField()
    def __str__(self): return self.name


class Pipeline(models.Model):
    name = models.CharField(max_length=300)
    targetlist = models.ForeignKey(TargetList, on_delete=models.SET_NULL, null=True)
    method = models.ForeignKey(Method, on_delete=models.CASCADE, null=True) 
    ms_file = models.ManyToManyField(MsFile, blank=True)
    def __str__(self): return self.name


class Result(models.Model):
    target = models.ForeignKey(Target, on_delete=models.CASCADE)
    ms_file = models.ForeignKey(MsFile, on_delete=models.CASCADE)
    intensity = models.FloatField()

Есть ли лучший шаблон для этой ситуации, который следует использовать в Django 4?


Другие модели

class Target(models.Model):
    label = models.CharField(max_length=300)
    compound = models.ForeignKey(Compound, on_delete=models.CASCADE, null=True, blank=True)
    rt_min = models.FloatField()
    rt_max = models.FloatField()
    mz_mean = models.FloatField()
    mz_width = models.FloatField()
    method = models.ForeignKey(Method, on_delete=models.CASCADE, null=True)
    def __str__(self): return self.label


class TargetList(models.Model):
    name = models.CharField(max_length=300)
    target = models.ManyToManyField(Target)
    def __str__(self): return self.name
Вернуться на верх