现在,我通过在网址上传递code
来返回产品
class Product(APIView):
def get_product(self, code):
try:
prod = ProductModel.objects.get(code=code)
return prod
except Product.DoesNotExist:
raise Http404
def get(self, request, code, format=None):
product = self.get_product(code)
serializer = ProductSerializer(product)
return Response(serializer.data)
url
path('product/<code>/', views.Product.as_view()),
型号:
class Product(models.Model):
code = JSONField(default=dict, null=True, blank=True)
description = models.TextField(blank=True, null=True, default='')
category = models.TextField(blank=True, null=True, default='')
marketing_text = models.TextField(blank=True, null=True, default='')
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
这将返回产品(如果它在数据库中),很简单,但是现在我在ProductModel中添加了一个带有多个代码["05017303032619", "05017303032626"]
的JSON字段,因此我想检查我是否有此代码并且仍然返回项,基本上可以通过在网址上传递以下代码之一来返回相同的项。
答案 0 :(得分:1)
您可以为此使用ArrayField而不是JSONField。
models.py
from django.contrib.postgres.fields import ArrayField
class Product(models.Model):
code = ArrayField(models.CharField(max_length=200), blank=True)
...
views.py
class Product(APIView):
def get_product(self, code):
try:
return ProductModel.objects.filter(code__contains=code).first()
except Product.DoesNotExist:
raise Http404
def get(self, request, code, format=None):
product = self.get_product(code)
serializer = ProductSerializer(product)
return Response(serializer.data)