Создание правильных связей в моделях Django
Передо мной стоит задача настроить модели в приложении таким образом, чтобы у меня была главная модель Spectrum, которая состоит из трех дополнительных моделей SpectrumMeasurement, SpectrumField, SpectrumPeak.
Пример кода:
class Spectrum(models.Model):
name = models.CharField(max_length=50, default="")
create_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, default=1, on_delete=models.PROTECT, related_name="author")
measurements = models.ForeignKey('SpectrumMeasurement', on_delete=models.CASCADE, related_name="measurements", null=True)
peaks = models.ForeignKey('SpectrumPeak', on_delete=models.CASCADE, related_name="peaks", null=True)
fields = models.ForeignKey('SpectrumField', on_delete=models.CASCADE, related_name="fields", null=True)
class SpectrumMeasurement(models.Model):
source = models.IntegerField(blank=True, null=True)
level = models.IntegerField(blank=True, null=True)
ionization = models.IntegerField(blank=True, null=True)
polarity = models.IntegerField(blank=True, null=True)
class SpectrumField(models.Model):
meta_data = models.JSONField(default=None, null=True)
class SpectrumPeak(models.Model):
peaks_data = models.JSONField(default=None)
comment = models.CharField(max_length=128, blank=True, default="")
Я создаю пустую модель Spectrum
Spectrum.objects.create()
Далее создаю 3 модели
SpectrumField.objects.create(id=id)
SpectrumMeasurement.objects.create(id=id)
SpectrumPeak.objects.create(id=id)
После чего добавляю нужные мне данные в эти 3 модели
SpectrumPeak.objects.create(peaks_data=peaks_values)
или
peaks = SpectrumPeak.objects.filter(id=id)
peaks.peaks_data = peaks_data
peaks.save()
В конце я обновляю основную модель Spectrum:
Spectrum.objects.filter(id=id).update(name=name, author=request.user, measurements=id, peaks=id, fields=id)
В результате всех этих действия я вижу в админке 4 модели, которые я прописал в admin.py
class SpectrumFieldAdmin(admin.ModelAdmin):
pass
class SpectrumMeasurementAdmin(admin.ModelAdmin):
pass
class SpectrumPeakAdmin(admin.ModelAdmin):
pass
class SpectrumAdmin(admin.ModelAdmin):
pass
admin.site.register(SpectrumField, SpectrumFieldAdmin)
admin.site.register(SpectrumMeasurement, SpectrumMeasurementAdmin)
admin.site.register(SpectrumPeak, SpectrumPeakAdmin)
admin.site.register(Spectrum, SpectrumAdmin)
В админке отображаются эти модели, в модели Spectrums я вижу все нужные мне поля: name, author, create_date, measurements, peaks, fields. В этих полях прописаны объекты моделей из других таблиц (например, SpectrumMeasurement Object 1)
Когда я удаляю основной объект из Spectrums, то удаляется у меня только сам объект Spectrum Object, но не удаляются связанные объекты из других таблиц. Можно сделать, чтобы ForeigKey были прописаны не в основном классе Spectrum, а в 3-х других, тогда я смогу удалить все связанные объекты при удалении объекта спектра, но я не буду видеть в админке все объекты, связанные с объектом спектра. Как правильно настроить связи, чтобы можно было через админку видеть какие объекты из таблиц связаны с основным объектом Spectrum и при этом удалять сразу все связанные таблицы одним нажатием при удалении объекта спектра? И возможно ли получать и обновлять значения в связанных таблицах через основную модель Spectrum?