Добрый день!
Как правильно организовать urls.py и views.py?
Сейчас у меня в urls.py:
url(r'^myapi/(?P<pk>\d+)/', MyAPI.as_view()),
url(r'^myapi$', MyAPI.as_view()),
views.py:
class MyModelAPI(mixins.UpdateModelMixin, generics.ListCreateAPIView):
model = MyModel
...
def get_serializer_class(self):
if self.request.method in ['PUT', 'POST']:
return MyModelIdSerializerBasic
return MyModelSerializer
def get_queryset(self):
return self.model.objects.filter(user=self.request.user).order_by('order')
def create(self, request, *args, **kwargs):
...
def delete(self, request, pk, format=None):
try:
myitem = self.model.objects.get(myitem_id=pk, user=request.user)
myitem.delete()
return Response(status=status.HTTP_200_OK)
except ObjectDoesNotExist:
return Response(status=status.HTTP_204_NO_CONTENT)
return Response(status=status.HTTP_204_NO_CONTENT)
serializers.py:
class MyModelSerializer(serializers.ModelSerializer):
myitem = MySerializer()
class Meta:
model = MyModel
class MyModelIdSerializerBasic(serializers.ModelSerializer):
class Meta:
model = MyModel
Для удаления по pk вызываю DELETE /myapp/номер/
для получения всего списка вызываю GET /myapp
для получения объекта по pk - GET /myapp/номер/
Если добавляю для третьего варианта
def get(self, request, pk, format=None):
if request.method == 'GET':
try:
myitem = self.model.objects.get(myitem_id=pk, user=request.user)
return Response(myitem, status=status.HTTP_200_OK)
except ObjectDoesNotExist:
return Response(status=status.HTTP_204_NO_CONTENT)
return Response(status=status.HTTP_204_NO_CONTENT)
Перестает работать второй (получение всего списка), т.к. на GET срабатывает эта функция get(...), а при GET /myapp нет параметра pk.
Как решить эту проблему?
И как добавить получение и удаление объекта не по pk, а по любому другому полю?
Updated 25 Sept. 2015, 17:38 by mdlv.