2015-06-14 6 views
0

Я новичок в ФПИ и питона так легко идти на меня ... Я могу успешно получить объекты RoadSegment, но я не могу понять, как обновить существующий объектDRF Обновление существующих объектов

У меня есть следующие модель:

class RoadSegment(models.Model): 
    location = models.CharField(max_length=100) 
    entryline = models.CharField(unique=True, max_length=100) 
    trafficstate = models.CharField(max_length=100) 

со следующим сериализатором:

class RoadSegmentSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = RoadSegment 
     fields = ('entryline','trafficstate','location') 

А следующий вид

class RoadSegmentViewSet(viewsets.ModelViewSet): 
    queryset = RoadSegment.objects.all() 
    serializer_class = serializers.RoadSegmentSerializer 

Мой urls.py выглядит следующим образом:

router.register(r'roadsegment', RoadSegmentViewSet, base_name='roadsegment-detail') 

GET http://127.0.0.1:8000/api/v1/roadsegment/ возвращает

[{"entryline":"2nd","trafficstate":"main","location":"downtown"},{"entryline":"3nd","trafficstate":"low","location":"downtown"}] 

Я хотел бы иметь возможность обновить существующий объект

ЗАПЛАТУ http://127.0.0.1:8000/api/v1/roadsegment/

{"entryline":"2nd","trafficstate":"SOMENEWVALUE","location":"downtown"} 
+1

Я не вижу никаких достопримечательностей, как идентифицируются ваши предметы. Обычно идентификатор указывается в URL-адресе ресурса, то есть '' '/ api/v1/roadsegment/42 /' ''. –

+0

Вы заглянули в официальный учебник? Вот пример, который очень похож на ваш случай: http://www.django-rest-framework.org/tutorial/3-class-based-views/ –

ответ

1

На ваш взгляд, необходимо обеспечить следующее:

lookup_field -> Most probably the ID of the record you want to update 
lookup_url_kwarg -> The kwarg in url you want to compare to id of object 

Вы должны определить новый URL-адрес в файле urls.py. Это будет нести lookup_url_kwarg. Это может быть сделано следующим образом:

urlpatterns = patterns('', 
    url(r'^your_url/$', RoadSegmentViewSet.as_view()), 
    url(r'^your_url/(?P<kwarg_name_of_your_choice>\w+)/$',RoadSegmentViewSet.as_view()), 
) 

kwarg_name_of_your_choice потребности размещаемой в вашем режиме просмотра в lookup_url_kwarg.

Запрос, что теперь будет отправка:

PATCH http://127.0.0.1:8000/api/v1/roadsegment/object_id_to_update/

И вы сделали.

+0

Спасибо! Я смог заставить его работать с этой информацией. По какой-то причине URL должен быть в urlpatterns, а не в маршрутизаторе. – Kevin

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