有两个表user, phone
由中间表owner
链接。这里的目标是使用Rest API来获取特定用户的所有手机,
http://127.0.0.1/users/alice/phones/
。
我使用ModelSerializer
作为序列化程序,使用ViewSet
作为视图。请告诉我如何完成这项工作?我不知道如何路由/users/user_name/phones/
以获取特定用户的电话。
感谢。
代码段:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model=User
class PhoneSerializer(serializers.ModelSerializer):
class Meta:
model=Phone
class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model=Owner
depth=1
// views
class UserViewSet(viewsets.ModelViewSet):
queryset=User.objects.all()
serializer_class=UserSerializer
class PhoneViewSet(viewsets.ModelViewSet):
queryset=Phone.objects.all()
serializer_class=PhoneSerializer
....
答案 0 :(得分:0)
我建议您创建filter。
会是这样的:
1)创建过滤器(确保已安装django-filter。):
# filters.py
import django_filters
class PhoneFilter(django_filters.FilterSet):
user = django_filters.Filter(name="user__user_name")
class Meta:
model = Phone
fields = ('user',)
2)将过滤器添加到 ViewSet :
# views.py
class PhoneViewSet(viewsets.ModelViewSet):
queryset=Phone.objects.all()
serializer_class=PhoneSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = filters.PhoneFilter
现在您可以使用此网址:/phones/?user=user_name
。
答案 1 :(得分:0)
使用@detail_route
将URL路由到您的功能,例如,
@detail_route(methods=['get'])
def phones(self, request, pk=None):
pass
http://127.0.0.1/users/alice/phones
会有效!