1. 程式人生 > >Django rest_framework----序列化元件

Django rest_framework----序列化元件

 

生成hypermedialink

serializer.pclass BookModelSerializers(serializers.ModelSerializer):

class Meta:
        model = Book
        fields = "__all__"

    publish=serializers.HyperlinkedIdentityField(
            view_name="detailpublish", #urls.py detailpublish檢視的別名
            lookup_field="
publish_id", #book表字段名 lookup_url_kwarg="pk", #對到url裡的(?P<pk>\d+) )


檢視使用時加 context={'request': request}
res=BookSerializers(ret,many=True,context={'request': request})

urls.py

  url(r'^publishes/(?P<pk>\d+)/$', views.PublishDetailView.as_view(),name="detailpublish
"), # View:view(request)=====APIView:dispatch() url(r'^books/(\d+)/$', views.BookDetailView.as_view(),name="detailbook"), #url(r'^books/(\d+)/$', View:view), # view(request)

 

 

post請求save()時重寫create方法

因為自定製了欄位

publish=serializers.CharField(source="publish.pk")
class BookModelSerializers(serializers.ModelSerializer):
    
class Meta: model = Book fields = "__all__" publish=serializers.CharField(source="publish.pk") # authors=serializers.CharField(source="authors.all") # authors = serializers.SerializerMethodField() # def get_authors(self,obj): # temp=[] # for obj in obj.authors.all(): # temp.append(obj.name) # return temp def create(self, validated_data): print("validated_data",validated_data) book=Book.objects.create(title=validated_data["title"],price=validated_data["price"],pub_date=validated_data["pub_date"],publish_id=validated_data["publish"]["pk"]) book.authors.add(*validated_data["authors"]) return book