[英]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.