У меня есть родительская модель, которая содержит базу данных уникальных записей следующим образом (усечено - есть еще много полей):
models.py - родительский элемент
class DBPlatform(models.Model):
description = models.CharField(max_length=300, unique=True)
PDS_date = models.DateField()
PDS_version = models.CharField(max_length=50, blank=True)
Я использую эту модель, чтобы создать дочернюю модель, чтобы я не копировал все поля. Дочерняя модель сохраняет указанные c созданные пользователем экземпляры родительских записей. Они хранятся отдельно, так как они могут быть отредактированы пользователем:
models.py - child
class Platform(DBPlatform):
scenario = models.ForeignKey(Scenario,
on_delete=models.CASCADE,
related_name="platforms")
database_platform = models.ForeignKey(DBPlatform,
on_delete=models.CASCADE,
related_name="instances")
edited = models.BooleanField()
Я использую Django REST Framework для создания API для возможного приложения. Когда дочерняя модель создана, я хочу обновить все ее унаследованные поля с полями родительской модели. Невероятно запутанные шаги, которые я предпринял (которые не работают), находятся в файле views.py дочернего режима. Следующее:
api.views.py - child
class PlatformViewSet(viewsets.ModelViewSet):
lookup_field = "id"
serializer_class = PlatformSerializer
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
db_id = self.request.data["database_platform"]
database_platform = get_object_or_404(DBPlatform, id=db_id)
datadict = self.request.data.dict()
datadict.update(database_platform.__dict__)
query_dict = QueryDict('', mutable=True)
query_dict.update(datadict)
self.request.data = query_dict
serializer.save()
Как мне добиться того, что я хочу сделать? Я, конечно, придерживаюсь неправильного подхода, поскольку это не может быть редкостью.
РЕДАКТИРОВАТЬ : Комментарий Руддры заставил меня считать, что весь шаблон проектирования неисправен. Должен ли я использовать одну модель и логический флаг для экземпляра шаблона?