Показывать конкретные данные пользователя в приложении Django вместо всех деталей - PullRequest
0 голосов
/ 16 декабря 2018

Я создаю свой первый проект Django.Я взял 30 000 значений в качестве входных данных и хочу показать конкретные значения в соответствии с первичным ключом.

Код:

class employeesList(APIView):

def get(self,request):
    employees1 = employees.objects.all()

    with open('tracking_ids.csv') as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = employees.objects.get_or_create(
            AWB=row[0],
            Pickup_Pincode=row[1],
            Drop_Pincode=row[2],
            )
    serializer = employeesSerializer(employees1 , many=True)
    return Response(serializer.data)

def post(self,request):
    # employees1 = employees.objects.get(id=request.employees.AWB)
    employees1 = employees.objects.all()
    serializer = employeesSerializer(employees1 , many=True)
    return Response(serializer.data)        

Если я введу http://127.0.0.1:8000/employees/ в URL, я получу всеценности .Я хочу, чтобы URL был похож на http://127.0.0.1:8000/employees/P01001168074 и отображал значения P01001168074, где P01001168074 - основной идентификатор.

Я прочитал 1: , показывая значения модели конкретного пользователя django 2) редактирование пользовательских данных в python django rest framework но они отличаются

Можно ли это сделать и если можно, то как?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Один хороший вариант - использовать viewset, который уже содержит конечную точку списка и сведений и не требует большого количества кода для простой настройки по умолчанию

views.py

from rest_framework import viewsets


class EmployeeViewSet(viewsets.ModelViewSet):
    serializer_class = EmployeeSerializer
    queryset = Employee.objects.all()

urls.py

from rest_framework.routers import SimpleRouter
from views import EmployeeViewSet


router = SimpleRouter()
router.register(r'employees', EmployeeViewSet, base_name='employees')

urlpatterns = router.get_urls()

Подробнее о наборах вы можете прочитать в документах DRF

0 голосов
/ 16 декабря 2018

Предполагая, что вы используете Django 2.0, вы должны настроить путь, по которому можно записать ваш параметр , как видно из документации

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.serializers import ModelSerializer

class A(models.Model):
    x = models.CharField(max_length=250)


class MySerializer(ModelSerializer):
    class Meta:
        model = A
        fields = ('x',)


class MyListView(APIView):

    def get(self, request, *args, **kwargs):
        # simply get all the objects, serialize and return the response
        elems = A.objects.all()
        response_data = MySerializer(elems, many=True).data
        return Response(data=response_data)


class MyDetailView(APIView):

    def get(self, request, *args, **kwargs):
        # we obtain the parameter from the URL
        desired_item = kwargs.get("desired_item", None)

        # we filter the objects by it and get our instance
        element = A.objects.filter(x=desired_item).first()

        # serialize the instance and return the response
        response_data = MySerializer(element).data
        return Response(data=response_data)

# all we have to now is define the paths for the list and the detail views.
urlpatterns = [
    path('employees/', MyListView.as_view()),
    path('employees/<str:desired_item>', MyDetailView.as_view())
]
...