【发布时间】:2020-01-24 08:36:12
【问题描述】:
我有一个包含唯一记录数据库的父模型,如下所示(截断 - 还有更多字段):
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)
我使用这个模型来创建一个子模型,以节省我复制所有字段的时间。子模型保存特定的用户生成的父记录实例。它们被单独存储,因为它们可以由用户编辑:
models.py - 孩子
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 - 孩子
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()
我怎样才能实现我想要做的事情?我肯定采取了错误的方法,因为这并不罕见。
编辑: Ruddra 的评论让我认为整个设计模式是错误的。我应该只为“模板”实例使用一个模型和一个布尔标志吗?
【问题讨论】:
-
我不明白,为什么需要将数据从父级复制到子级?为什么需要保留重复数据?
-
父实例是模板,用户可以在子实例中编辑。
标签: python django django-rest-framework