返回具有多个ID的同一产品

时间:2019-05-28 14:40:36

标签: django django-rest-framework

现在,我通过在网址上传递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字段,因此我想检查我是否有此代码并且仍然返回项,基本上可以通过在网址上传递以下代码之一来返回相同的项。

1 个答案:

答案 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)