簡體   English   中英

如何僅顯示python django服務器(其余框架)上整個列表存儲中的特定數據

[英]How to display only specific data from the entire list storage on python django server (rest framework)

我只需要顯示(如主題標題中)列表中存儲在服務器上的特定數據(PYTHON / DJANGO / REST_FRAMEWORK)。

例如,我想選擇以“ id = 1”植入服務器的數據,但是我總是找回所有項目。 你能解釋一下如何糾正嗎?

'urls'文件(項目級別):

# URL routes - known as endpoints API
urlpatterns = [
    path('admin/', admin.site.urls),
    path('devices/', include('efota.api.urls')),
]

'urls'文件(下級文件夾):

urlpatterns = [
    url('', views.DeviceList.as_view()),
    url('<int:pk>/', views.DeviceDetail.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)

“意見”文件:

class DeviceList(generics.ListAPIView):
    queryset = Device.objects.all()  
    serializer_class = DeviceSerializer 

class DeviceDetail(generics.RetrieveAPIView):
    queryset = Device.objects.all()      
    serializer_class = DeviceSerializer  

“序列化器”文件:

class DeviceSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')

    # the 'fields' controls which database attributes are available
    class Meta:
        model = Device
        fields = (
            'id',
            'user',
            'id_token',
            'current_firmware',
            'carrier_code',
            'model_name',
            'owner',
        )
        read_only_fields = ['id']


    def get_url(self, obj):
        request = self.context.get("request")
        return obj.get_api_url(request=request)

'模型'文件:

class Device(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey('auth.User', related_name='owner', 
            on_delete=models.CASCADE)
    user = models.CharField(max_length=50, verbose_name='user')
    id_token = models.CharField(max_length=1000, 
            verbose_name='id_token')
    current_firmware = models.CharField(max_length=41, 
           verbose_name='current_firmware')
    carrier_code = models.CharField(max_length=5, 
           verbose_name='carrier_code')
    model_name = models.CharField(max_length=10, 
           verbose_name='model_name')

    class Meta:
        ordering = ('created', )


    def __str__(self):
        return self.model_name

“管理員”文件:

from django.contrib import admin
from .models import Device

# Register your models here.
admin.site.register(Device)

您在urls.py中混淆了舊式URL語法和新式路徑語法。 url()函數使用一個正則表達式,並且r''匹配每個 URL,而<int:pk>/僅匹配該文字字符串 請改用path

urlpatterns = [
    path('', views.DeviceList.as_view()),
    path('<int:pk>/', views.DeviceDetail.as_view()),
]

要過濾ListAPIView返回的結果,可以如下修改其get_queryset方法。

class DeviceDetail(generics.ListAPIView):
    serializer_class = DeviceSerializer

    def get_queryset(self):
        return Device.objects.filter(id=self.kwargs['pk'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM