0
私の環境は、Django 1.10に基づいています。PostgreSQL 9.5と;PostgreSQLマルチテーブルモデルのシリアライザとViewSet継承?
私は親テーブルから継承する子テーブルを持っています。それぞれについて、私はそれぞれの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のための1:
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'])
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)
それはシリアライザおよびビューセットの中からの継承を持つことが可能です:
したがって、私は3つのビューセット、各シリアライザのための1つを作ったのですか?私は前の例を試しましたが、新しいChildModelをPOSTしようとするたびに、すべてのParentModelフィールドにNULL値があることを示す例外がスローされます(ChildModelフィールドのフィールドを除く)。
シリアライザとビューセットの間で継承が可能ですか?あなたが望むデータ形式を投稿してください。 – Windsooon