Как при создании объекта одной модели создавать зависимые объекты другой модели в Django Rest
В моем проекте существует 2 модели, которые связаны между собой через ForeignKey. При загрузке фала с данными начинает создаваться объект первой модели Spectrum. Но также после создания объекта спектра должны создаваться объекты модели Metadata, их может быть несколько, в зависимости от того сколько было передано значений в файле. Вопрос заключается в том, как это делать правильно, чтобы создавался спектр и к нему создавались и привязывались объекты метадата. Вот примеры моих моделей:
class Spectrum(models.Model):
spectrum = models.TextField(db_index=True, verbose_name="Спектр")
lastUpdated = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
dateCreated = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
lastCurated = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
date_prepare = models.DateField(db_index=True, blank=True, null=True, verbose_name="Дата исследования")
submitter = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name="Оператор")
similarity = models.FloatField(default=0, db_index=True, verbose_name="Сходство")
draft = models.BooleanField(default=True, verbose_name="Черновик")
library = models.ForeignKey('Library', default=1, blank=True, db_index=True, on_delete=models.PROTECT,
related_name='spectrums', verbose_name="Библиотека")
tags = models.ManyToManyField('Tag', blank=True, related_name='spectrums', verbose_name="Теги")
field = models.CharField(max_length=255, blank=True, db_index=True, verbose_name="any_field")
reg_num = models.CharField(max_length=64, blank=True, db_index=True, verbose_name="Регистрационный номер")
is_etalon = models.BooleanField(default=False, verbose_name="Эталон")
metaDataMap = models.JSONField(db_index=True, default=dict, verbose_name="Метаданные")
class Metadata(models.Model):
spectrum = models.ForeignKey('Spectrum', on_delete=models.CASCADE, related_name="metadata")
url = models.CharField(max_length=255, blank=True, null=True, verbose_name="url")
name = models.CharField(max_length=255, blank=True, null=True, verbose_name="name")
value = models.CharField(max_length=255, blank=True, null=True, verbose_name="value")
hidden = models.BooleanField(default=False, verbose_name="hidden")
category = models.CharField(max_length=64, blank=True, null=True, verbose_name="category")
computed = models.BooleanField(default=False, verbose_name="computed")
unit = models.CharField(max_length=255, blank=True, null=True, verbose_name="unit")
nodes = models.JSONField(db_index=True, default=dict, verbose_name="nodes")
У меня есть сериализаторы и вьюхи:
class MetadataViewSet(viewsets.ModelViewSet):
queryset = Metadata.objects.all()
serializer_class = MetadataSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
class SpectrumViewSet(viewsets.ModelViewSet):
queryset = Spectrum.objects.all()
serializer_class = SpectrumSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
Буду рад любой помощи. Если нужны уточнения, по вопросу, пишите.