9

Tôi muốn thêm một namespace url vào router api của tôi, nhưng khi tôi làm router vẫn tìm kiếm các url mà không có một không gian tên:Làm thế nào để thêm url namespace với một router django-nghỉ ngơi-framework viewset

router = DefaultRouter() 
router.register(r'users', UserViewSet) 
router.register(r'events', EventViewSet) 
router.register(r'comments', CommentViewSet) 

urlpatterns = patterns('apiroot.views', 
         url(r'^', include(router.urls, namespace='api')), 
         ) 

Api có thể duyệt tìm kiếm các tên url như 'user-list''user-detail' vẫn thay vì 'api:user-list' đó là điều tôi muốn xảy ra.

Tôi giả định có một sửa chữa dễ dàng cho điều này (nó có vẻ giống như một điều khá chuẩn để làm) nhưng tôi không thể tìm thấy bất kỳ giải pháp trong tài liệu django-rest-framework. Nếu tôi thiếu thứ gì đó từ tài liệu, vui lòng chia sẻ liên kết hoặc nếu tôi tiếp cận điều này sai (nghĩa là "tại sao bạn làm điều đó, thực hành không tốt" hoặc bất kỳ điều gì), hãy giải thích lý do hoặc cách quản lý url api chính xác được. Cảm ơn!

Trả lời

4

Có một số pull request open for this currently. Xin vui lòng tham gia thảo luận.

+0

Awesome! @ Readevalprint của kéo làm việc cho hầu hết các phần? Tôi muốn đóng góp nhưng tôi không muốn gây ô nhiễm cuộc thảo luận với sự thiếu hiểu biết của tôi về tình hình đầy đủ. Bạn có thể tóm tắt ngắn gọn về tình trạng và các vấn đề chính của việc chưa chấp nhận việc kéo không? –

+0

Lý do chính hiện tại là thiếu kiểm tra - đó là thêm một hành vi mới và chúng tôi cần phải trang trải nó (và bootstrapping thử nghiệm là một chút đau đớn vì vậy chúng tôi cần mocking phong nha.) - Tôi đoán là trong hoàn cảnh bình thường nó sẽ chỉ làm việc ™ - nếu nó không hoạt động cho bạn, điều đó cũng hữu ích khi bạn biết. Đừng lo lắng về việc gây ô nhiễm thảo luận: Tham gia. :-) –

+2

bạn có thể chỉ ra giải pháp cuối cùng ở đây không? –

0

Đây là câu hỏi rất cũ và câu trả lời hiện được chấp nhận từ Carlton Gibson chỉ là một liên kết đến yêu cầu kéo trên GitHub.

Khi tìm kiếm trên web để sử dụng các bộ định tuyến khung REST của Django với không gian tên, nó xuất hiện đầu tiên trong kết quả. Nó có vẻ là câu hỏi duy nhất tại SO về chủ đề này.
Vì không có câu trả lời cụ thể với ví dụ mã, ở đây tôi muốn thêm giải pháp của mình.

Hãy lấy số EventViewSet từ câu trả lời của OP. Đối với chế độ xem này, phải có lớp mô hình Event và bộ nối tiếp mô hình EventSerializer.
Các EventSerializer có thể trông như thế này:

class EventSerializer(serializers.HyperlinkedModelSerializer): 
    # any other fields 
    class Meta: 
     model = Event 
     # anything else 
     extra_kwargs = { 
      'url': {'view_name': 'api:event-detail'} 
     } 

Đó là một ví dụ cho HyperlinkedModelSerializer trong đó bao gồm url lĩnh vực.

Bất kỳ lĩnh vực siêu liên kết như HyperlinkedIdentityField hoặc HyperlinkedRelatedField, mà mất view_name như một cuộc tranh cãi nên được thông qua tên cái nhìn đúng đắn chứa không gian tên, hoặc trong việc kê khai hoặc thông qua extra_kwargs.
Đối với một giả định CommentSerializer (tương ứng với CommentViewSet) nó có thể trông giống như:

class EventSerializer(serializers.HyperlinkedModelSerializer): 
    comments = serializers.HyperlinkedRelatedField(
     many=True, 
     read_only=True, 
     view_name='api:event-detail' 
    ) 
Các vấn đề liên quan