Могу ли я сделать запрос на получение django из параметра модели? - PullRequest
0 голосов
/ 23 апреля 2020

Я использую Django рамки для моего API. В моем файле views.py я использую Viewset.ModelViewset.

class SchemaViewSet(viewsets.ModelViewSet):

    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer

Мой URL для этого: http://127.0.0.1: 7000 / api / schema / Это дает мне возможность получить и отправить. Ответ примерно такой:

{
        "id": 1,
        "name": "yatharth",
        "version": "1.1"
    },

Чтобы удалить / поставить / патч мне нужно передать идентификатор, который равен 1, например: http://127.0.0.1: 7000 / api / schema / 1 / .
Могу ли я сделать это по имени следующим образом: http://127.0.0.1: 7000 / api / schema / yatharth / вместо идентификатора.

Мой model.py (я могу установить name to unique = True)

class Schema(models.Model):
    """Database model for Schema """


    name= models.TextField()
    version = models.TextField()

    def __str__(self):
        return self.name

Мне также нужен параметр id, поэтому удалить его нельзя, но вместо того, чтобы делать запрос по id, мне нужно сделать его по имени (оба уникальны)

что я нашел в django документации остального фреймворка

def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

Но не знаете, как изменить первичный ключ?

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете сделать это, установив lookup_field = 'name' в вашем SchemaViewSet.

например

class SchemaViewSet(viewsets.ModelViewSet):

    queryset = models.Schema.objects.all()
    serializer_class = serializers.SchemaSerializer
    lookup_field = 'name'
...