«Как добавить» Вложенный URL в DRF, динамическое представление модели » - PullRequest
0 голосов
/ 04 октября 2019

* у меня есть * router.register(r'reseller/', views.UserViewSet) и router.register(r'one/', views.OneLViewSet)

Я хочу сделать вложенный URL-адрес, например, 'реселлер / / {pk} / one /

Ноу меня не получилось.

Я пытался добавить DynamicRelationField к Модель пользователя , но не работал.

my user_model

       phone = models.CharField(_('phone number'), max_length=30, blank=True)
       address = models.CharField(_('reseller address'), max_length=220, blank=True)

Модель OneL

        id = models.AutoField(_('lottery id'), unique=False, primary_key=True, auto_created=True,)

        lno = models.CharField(_('1000ks lottery'), max_length=8, unique=True)
        name = models.CharField(_('customer name'), max_length=100, )
        reseller = models.ForeignKey('lotto_app.User', on_delete=models.CASCADE)

user_serializer

    class UserSerializer(serializers.DynamicModelSerializer):
        class Meta:
            model = User
            fields = ('id', 'username', 'email', 'phone', 'address', )

сериализатор oneL

 class OneLSerializer(serializers.DynamicModelSerializer):
        reseller = fields.DynamicField(source='reseller.username', read_only=True)

        class Meta:
            model = OneL
            fields = (
                'id', 'lno', 'name', 'reseller', 'phone', 'address', 'nth', 'is_winner', 'prize_details', 'created_at',
                'updated_at')

динамический пользовательский набор настроек

    class UserViewSet(DynamicModelViewSet):
        permission_classes = (IsAdmin, IsAuthenticated)
        model = User
        queryset = User.objects.all()
        serializer_class = UserSerializer

OneLviewSet

    class OneLViewSet(DynamicModelViewSet):
        permission_classes = (IsAuthenticated, IsOwner)
        model = OneL
        queryset = OneL.objects.all()
        serializer_class = OneLSerializer


        def create(self, request, *args, **kwargs):
            serializer = OneLSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save(reseller=request.user)
                return Response(serializer.data)

        def list(self, request, *args, **kwargs):
            queryset = OneL.objects.filter(reseller=request.user)
            serializer = OneLSerializer(queryset, many=True)
            return Response(serializer.data) 


Я хочу изменить это .url

    router.register(r'reseller', views.UserViewSet)
    router.register(r'one', views.OneLViewSet)
    urlpatterns = [
        path('api/saledatas/', include(router.urls))
    ]

ДО ЭТОГО

    router.register(r'reseller', views.UserViewSet)
    router.register(r'reseller/{pk}/one', views.OneLViewSet) #or <int:pk>
    urlpatterns = [
        path('api/saledatas/', include(router.urls))
    ]

После ошибки изменения - "Запрос URL: http://localhost:8000/api/saledatas/reseller/1/one/" Не найдено! И как заставить http://localhost:8000/api/saledatas/reseller/1/one/ работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...