【发布时间】:2015-12-10 22:05:33
【问题描述】:
DRF 是否可以使用 ModelSerializers?如果可能的话,我最感兴趣的是查看一个可以重现的示例。
这是我的模型:
class Grandparent(Model):
g_name = CharField(max_length=10)
parent = ForeignKey('Parent')
class Parent(Model):
p_name = CharField(max_length=10)
child = ForeignKey('Child')
class Child(Model):
c_name = CharField(max_length=10)
这是我的序列化程序:
class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = models.Child
fields = ('id', 'c_name')
class ParentSerializer(serializers.ModelSerializer):
child = ChildSerializer()
def create(self, validated_data):
child_data = validated_data.pop('child')
child, _ = models.Child.objects.get_or_create(**child_data)
return models.Parent.objects.create(child=child, **validated_data)
class Meta:
model = models.Parent
fields = ('id', 'p_name', 'child')
class GrandparentSerializer(serializers.ModelSerializer):
parent = ParentSerializer()
class Meta:
model = models.Grandparent
fields = ('id', 'g_name', 'parent')
这是我的祖父母观点:
class GrandparentList(generics.ListCreateAPIView):
queryset = models.Grandparent.objects.all()
serializer_class = serializers.GrandparentSerializer
这是我尝试发布到祖父母视图时遇到的错误:
/grandparents/ 'list' 对象的 AttributeError 没有属性 'get'
【问题讨论】:
-
代码当前不一致,报错。没有堆栈跟踪。目前,由于 GrandparentSerializer 中没有创建,DRF 会抱怨添加它或将其声明为只读
-
你试过运行它吗?我原以为是这种情况,但我收到了列表错误。
-
我尝试覆盖祖父母的 create 方法,但在引发异常之前它甚至没有被调用。
-
我已经运行了该代码并得到了 DRf 抱怨 GrandparentSerializer 创建方法或只读缺失的错误
-
您使用的是什么版本的 DRF?我正在使用 3.2.3。
标签: python django serialization django-rest-framework