【发布时间】:2018-09-06 17:27:57
【问题描述】:
我已经尝试了所有我能做的,但没有什么对我有用
我的模型:
model Parent():
...
model Child():
owner = models.ForeignKey(Parent, on_delete=models.CASCADE,
related_name='children')
...
我的网址:
router = routers.DefaultRouter()
router.register(r'parents', ParentViewSet, base_name="parents")
router.register(r'childs', ChildViewSet, base_name="childs")
urlpatterns = [
path('api/', include(router.urls)),
]
我的序列化器:
class ParentSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="parent-detail", lookup_field='pk')
children = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
...
'children')
def get_children(self, obj):
queryset = Child.objects.filter(owner=obj)
children = ChildSerializer(queryset, many=True).data
return children
class ChildSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="child-detail", lookup_field='pk')
...
我的视图集:
class ParentViewSet(SerializerByActionMixin, LoggingMixin, viewsets.ModelViewSet):
queryset = Parent.objects.all().prefetch_related('children').order_by('-date_joined')
serializers = {
'default': ParentSerializer,
'create': ParentCreateSerializer,
'update': ParentUpdateSerializer,
}
class ChildViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Child.objects.all().order_by('-timestamp')
serializer_class = ChildSerializer
http_method_names = ['get', 'put', 'patch', 'head']
我的问题:
HyperlinkedIdentityField 需要序列化程序上下文中的请求。实例化序列化器时添加context={'request': request}。
我读了这个,但不明白我的代码在哪里粘贴这个上下文。
请帮忙。谢谢!
【问题讨论】:
标签: nested django-rest-framework serialization