【发布时间】:2017-01-08 17:03:38
【问题描述】:
我的环境基于 Django 1.10 & PostgreSQL 9.5 和;
我有一个继承自父表的子表。对于每一个,我分别有一个 Django 模型类 ChildModel 和 ParentModel:
class ParentModel(models.Model):
id = models.AutoField(primary_key=True)
owner = models.ForeignKey('auth.User', related_name='parents')
class Meta:
managed = False
db_table = 'parenttable'
class ChildModel(ParentModel):
name = models.CharField(unique=True, max_length=255)
abbreviation = models.CharField(unique=True, max_length=2)
class Meta:
managed = False
db_table = 'childtable'
然后,我为其中的每一个制作了一个序列化程序,并为 django.contrib.auth.models.User 制作了一个序列化程序:
class UserSerializer(serializers.HyperlinkedModelSerializer):
parents = serializers.PrimaryKeyRelatedField(many=True, queryset=ParentModel.objects.all())
class Meta:
model = User
fields = (['id', 'username', 'parents'])
class ParentModelSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.IntegerField(source='parent.id', read_only=True, allow_null=False)
class Meta:
model = ParentModel
fields = (['id', 'owner'])
class ChildModelSerializer(ParentModelSerializer):
class Meta:
model = ChildModel
fields = (['name', 'abbreviation'])
因此,我制作了三个 ViewSet,每个序列化器一个:
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class ParentModelViewSet(viewsets.ModelViewSet):
queryset = ParentModel.objects.all()
serializer_class = ParentModelSerializer
permission_classes = (permissions.IsAuthenticated, IsOwnerOrReadOnly)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class ChildModelViewSet(ParentModelViewSet):
queryset = ChildModel.objects.all()
serializer_class = ChildModelSerializer
permission_classes = (permissions.IsAuthenticated, IsOwnerOrReadOnly)
是否可以从序列化程序和视图集之间继承?我尝试了前一个示例,但每次尝试发布新的 ChildModel 时,都会引发异常,显示所有 ParentModel 字段都有 NULL 值(ChildModel 字段中的那些除外)。
【问题讨论】:
-
是否可以从序列化器和视图集之间继承?请发布您想要的数据格式。
标签: python django postgresql django-models django-rest-framework