首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django应用程序中显示特定用户详细信息,而不是所有详细信息

在Django应用程序中显示特定用户详细信息,而不是所有详细信息
EN

Stack Overflow用户
提问于 2018-12-16 21:15:18
回答 2查看 171关注 0票数 0

我正在创建我的第一个Django项目。我接受了30,000个值作为输入,并希望根据主键显示特定的值。

代码:

代码语言:javascript
运行
复制
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)        

如果我在URL中输入http://127.0.0.1:8000/employees/,我会得到所有的值。我希望网址类似于http://127.0.0.1:8000/employees/P01001168074,并显示P01001168074的值,其中P01001168074是主ID。

我读过1:showing the model values of specific user django 2)editing user details in python django rest framework,但它们不同

它能做到吗?如果它能做到,那么如何做到呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-16 21:40:49

假设您使用的是Django2.0,那么您必须配置一个能够捕获参数as seen in the documentation的路径

代码语言:javascript
运行
复制
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())
]
票数 2
EN

Stack Overflow用户

发布于 2018-12-17 04:31:21

一个不错的选择是使用已经包含list和detail端点的viewset,并且对于默认的简单设置只需要很少的代码

views.py

代码语言:javascript
运行
复制
from rest_framework import viewsets


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

urls.py

代码语言:javascript
运行
复制
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 docs中阅读有关视图集的更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53802513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档