Как включить поле внешнего ключа при сериализации результата поискового запроса из стога сена django - PullRequest
0 голосов
/ 25 декабря 2018

После долгих поисков, я, похоже, не могу найти решение этой проблемы: я создал новую конечную точку для поиска товаров из моего индекса товаров

Используя Django oscar с django oscar api, вот модели:

class Product(AbstractProduct):
   title = models.TextField(blank = True)

class ProductImage(AbstractProductImage):
    product = models.ForeignKey('catalogue.Product', on_delete=models.CASCADE)
    display_order = models.PositiveIntegerField()
    remote_image = models.URLField(blank=True)

views.py

class ItemSearchViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    serializer_class = ItemSearchSerializer

    def get_queryset(self):
        request = self.request
        queryset = EmptySearchQuerySet()

        if request.GET.get('q', ''):
            query = request.GET.get('q', '')
            queryset = SearchQuerySet().filter(content=query)
        return queryset

Serializers.py

from oscarapi.serializers import product

class ItemSearchSerializer(serializers.ModelSerializer):
    text = serializers.CharField()
    title = serializers.CharField()
    price = serializers.HyperlinkedIdentityField(view_name='product-price')
    image = product.ProductImageSerializer(many=True, required=False)  

    class Meta():
        model = Product
        fields = ('image', 'price', 'text', 'title')

Когда я нажимаю конечную точку с помощью localhost:8000/api/search/?q=bmw, кажется, что работает для всех остальныхполя, но не возвращает изображения, вот пример:

[
    {
        "image": null,
        "price": "http://localhost:8000/api/products/2339/price/",
        "text": "2339\nBMW 316 SE Automatic",
        "title": "BMW 316 SE Automatic"
    },
    {
        "image": null,
        "price": "http://localhost:8000/api/products/0029/price/",
        "text": "0029\nBmw 330d\nLoverly car in excellent condition",
        "title": "Bmw 330d"
    }]

Другое дело, поскольку для данного продукта может быть несколько изображений, я также хотел бы просто вернуть первое изображение, которое будет иметь display_order значение 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...