【发布时间】:2020-10-22 05:01:44
【问题描述】:
所以我有一个表,我想使用 GET 请求进行查询,它应该返回与 %NAME% 匹配的项目,但当前请求返回包含所有条目的完整表,而不是我想要的。
请求
http://localhost:8000/inventory/?name=cookie/
回复
GET /inventory/?name=cookie/
HTTP 200 OK
Allow: POST, OPTIONS, GET
Content-Type: application/json
Vary: Accept
[
{
"item_code": "61f6ccca-e822-4b36-9ddf-5ec79a55a184",
"name": "Golden Nutella Filled Cookie",
"price": 100,
"description": "Delicious Nutella-filled homemade cookie which will satisfy your cravings.",
"image": "https://images.unsplash.com/photo-1499636136210-6f4ee915583e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=700&q=80",
"quantity": 12
},
{
"item_code": "ef6f68c4-c9a3-4a4e-8d5a-14d8f75a01ba",
"name": "Fudgy Dark Brownie",
"price": 60,
"description": "Fudgy and chewy dark chocolate passion.",
"image": "https://bakerbynature.com/wp-content/uploads/2020/04/Cocoa-Fudge-Brownies-1-of-1.jpg",
"quantity": 16
}
]
预期反应
[
{
"item_code": "61f6ccca-e822-4b36-9ddf-5ec79a55a184",
"name": "Golden Nutella Filled Cookie",
"price": 100,
"description": "Delicious Nutella-filled homemade cookie which will satisfy your cravings.",
"image": "https://images.unsplash.com/photo-1499636136210-6f4ee915583e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=700&q=80",
"quantity": 12
},
]
模型:库存
import uuid
from django.db import models
class Inventory(models.Model):
item_code = models.UUIDField(
primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=50, null=False)
price = models.IntegerField(null=False)
description = models.CharField(max_length=500)
image = models.URLField()
quantity = models.PositiveIntegerField(default=0, null=False)
def __str__(self):
return f'Item: {self.name} - Price:{self.price}'
views.py
@api_view(['GET', 'POST'])
def inventory_list(request):
if request.method == 'GET':
inventory = Inventory.objects.all()
serializer = InventorySerializer(inventory, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = InventorySerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
为 %NAME% 编辑(使用 name__icontains=name)
@api_view(['GET', 'PUT', 'DELETE'])
def inventory_item(request, name):
try:
item = Inventory.objects.get(name__icontains=name)
except Inventory.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = InventorySerializer(item)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = InventorySerializer(item, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
item.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
serializers.py
class InventorySerializer(serializers.ModelSerializer):
class Meta:
model = Inventory
fields = ['item_code', 'name', 'price',
'description', 'image', 'quantity']
应用名称:api urls.py
urlpatterns = [
path('', inventory_list),
path('<str:name>/', inventory_item)
]
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('inventory/', include('api.urls'))
]
【问题讨论】:
-
欢迎来到 SO。你试过这个相关的问题stackoverflow.com/questions/18140838/… 吗?
-
这能回答你的问题吗? sql "LIKE" equivalent in django query
-
我在 views.py 中添加了一个编辑并使用了 name__icontains=name 但输出仍然相同
-
我想我必须补充一点,我正在使用 postgresql 作为我的数据库
-
@ManuelCarrero ,遗憾的是它没有。
标签: django django-rest-framework