2016-05-31 2 views
0

Я получаю следующий ответ от моего REST API на http://127.0.0.1:8000/api/category/:Получить одну запись на Django Rest Framework на основе идентификатора

[ 
    { 
     "id": "17442811-3217-4b67-8c2c-c4ab762460d6", 
     "title": "Hair and Beauty" 
    }, 
    { 
     "id": "18a136b5-3dc4-4a98-97b8-9604c9df88a8", 
     "title": "Plumbing" 
    }, 
    { 
     "id": "2f029642-0df0-4ceb-9058-d7485a91bfc6", 
     "title": "Personal Training" 
    } 
] 

Если бы я хотел получить доступ, одной записи, я полагаю, что я должен был бы перейти к http://127.0.0.1:8000/api/category/17442811-3217-4b67-8c2c-c4ab762460d6 доступа:

[ 
    { 
     "id": "17442811-3217-4b67-8c2c-c4ab762460d6", 
     "title": "Hair and Beauty" 
    } 
] 

Однако, когда я пытаюсь это, он возвращает все записи. Как я могу это решить? Это мой код до сих пор:

urls.py

urlpatterns = [ 
    url(r'^category/', views.CategoryList.as_view(), name="category_list"), 
    url(r'^category/?(?P<pk>[^/]+)/$', views.CategoryDetail.as_view(), name="category_detail") 
] 

views.py

class CategoryList(generics.ListAPIView): 
    """ 
    List or create a Category 
    HTTP: GET 
    """ 
    queryset = Category.objects.all() 
    serializer_class = CategorySerializer 


class CategoryDetail(generics.RetrieveUpdateDestroyAPIView): 
    """ 
    List one Category 
    """ 
    serializer_class = CategorySerializer 

serializers.py

class CategorySerializer(serializers.ModelSerializer): 
    """ 
    Class to serialize Category objects 
    """ 
    class Meta: 
     model = Category 
     fields = '__all__' 
     read_only_fields = ('id') 

models.py

class Category(models.Model): 
    """ 
    Category model 
    """ 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    title = models.CharField(max_length=255) 

    def __str__(self): 
     return "%s" % (self.title) 
+0

Почему бы не использовать конструкцию django rest 'ModelViewSets', которая бы решила вашу проблему. пожалуйста, посмотрите, что по этой ссылке: http://www.django-rest-framework.org/api-guide/viewsets/#modelviewset –

ответ

2

Ваш первый регулярное выражение, r'^category/', соответствует как URL-адрес с и без UUID.

Вы должны закрепить его в конце:

r'^category/$' 

Дополнительно/альтернативно, вы можете поменять порядок этих определений URL, так как Django будет принимать первый он соответствует.

+0

Спасибо, теперь я получаю следующую ошибку, когда я получаю доступ к http: // 127.0.0.1: 8000/api/category/17442811-3217-4b67-8c2c-c4ab762460d6/':' AssertionError at/api/category/17442811-3217-4b67-8c2c-c4ab762460d6/' – methuselah

+0

Я исправил указанное выше сообщение об ошибке, выполнив это: http://pastebin.com/MJdKBYsT в 'views.py'. Это верно? – methuselah

+0

Я не уверен, что вы просите или что вы сделали. –

Смежные вопросы