Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2016 13:37:08

fezeev
Зарегистрирован: 2016-02-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Формирование url товаров через UPC

Добрый день.

Мне нужно, чтобы у товара url формировался через артикул (поле UPC). А сейчас он формируется как product.slug+“_”+product.id
Как его можно поменять (или может быть добавить второй URL)?

Спасибо.

Офлайн

#2 Фев. 11, 2016 14:54:46

fezeev
Зарегистрирован: 2016-02-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Формирование url товаров через UPC

У меня получилось сделать желаемое грубым хаком кода oscar
А именно:

файл oscar/apps/catalogue/abstract_models.py
class AbstractProduct, поменял метод get_absolute_url() на вот это:

    def get_absolute_url(self):
        return reverse('catalogue:detail',
                       kwargs={'product_upc': self.upc})

файл oscar/apps/catalogue/app.py
class BaseCatalogueApplication, поменял в методе get_urls строчку
            url(r'^(?P<product_slug>[\w-]*)_(?P<pk>\d+)/$',
                self.detail_view.as_view(), name='detail'),
на
            url(r'^(?P<product_upc>[\w-]*)/$',
                self.detail_view.as_view(), name='detail'),

и в файле oscar/apps/catalogue/views.py
    def get_object(self, queryset=None):
        # Check if self.object is already set to prevent unnecessary DB calls
        if hasattr(self, 'object'):
            return self.object
        else:
            return super(ProductDetailView, self).get_object(queryset)
 
поменял на
    def get_object(self, queryset=None):
        # Check if self.object is already set to prevent unnecessary DB calls
        if hasattr(self, 'object'):
            return self.object
        elif "product_upc" in self.kwargs:
            return self.get_object_by_upc()
        else:
            return super(ProductDetailView, self).get_object(queryset)
    def get_object_by_upc(self):
        return Product.objects.get(upc=self.kwargs.get("product_upc"))

Оно заработало, но теперь у меня следующий вопрос: как бы это всё вынести из кода самого оскара наружу? Или ткните носом в документацию, желательно русскоязычную (хотя английская тоже ок).

Спасибо.

Отредактировано fezeev (Фев. 11, 2016 14:55:23)

Офлайн

#3 Фев. 12, 2016 12:39:33

fezeev
Зарегистрирован: 2016-02-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Формирование url товаров через UPC

Разобрался, всем спасибо. Официальная документация оказалась достаточно подробной, чтобы творчески ее переработать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version