Прямо сейчас я возвращаю товар, передавая code
по URL
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)
это вернет продукт, если он находится в базе данных, простые вещи, но теперь я добавил поле JSON в ProductModel с несколькими кодами ["05017303032619", "05017303032626"]
, поэтому я хочу проверить, есть ли у меня эти коды, и по-прежнему возвращать элемент, в основном возвращая тот же элемент передав один из этих кодов по URL-адресу.
Для этого вы можете использовать ArrayField вместо JSONField.
модели.py
from django.contrib.postgres.fields import ArrayField
class Product(models.Model):
code = ArrayField(models.CharField(max_length=200), blank=True)
...
просмотры.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)
Итак, в основном вы сохраняете список идентификаторов. Это правильно? И вы используете PostgreSQL, я полагаю?
да, именно так, как я написал ["05017303032619", "05017303032626"]
, и может варьироваться от 2 до 30
ах, да, хорошо, я пробовал с поиском __in
, но да, я совсем забыл об этом
Мне нужно поэкспериментировать, проблема, для меня в том, что в поле
json
у меня только список ключей, обновится с моделью