Поскольку вы не предоставили предварительный просмотр views.py для своей настройки, довольно сложно объяснить и решить вашу проблему. Но я бы объяснил, как можно настроить или настроить любое приложение / модель / представление django oscar.
Чтобы настроить модели, представления и URL-адреса, вам необходимо создать основное приложение Oscar, в котором находится модель / представление. Тогда вы сможете переопределить любые классы модели / вида.
Шаги, чтобы раскрутить / настроить приложение:
Если вы разветвляете приложение Оскар впервые, вам нужно создать корневую папку приложений, в которой будут находиться все ваши разветвленные приложения:
$ mkdir yourappsfolder
$ touch yourappsfolder / init .py
Создайте модуль python с той же «меткой приложения», что и приложение Oscar:
Пример: настройка приложения oscar.apps.catalogue
$ mkdir yourappsfolder/catalogue
$ touch yourappsfolder/catalogue/__init__.py
Если в приложении Oscar есть файл models.py, то вам нужно создать файл models.py в локальном приложении.
ваши собственные модели идут сюда
из импорта oscar.apps.catalogue.models *
ПРИМЕЧАНИЕ. Чтобы настроить модели Оскара, вы должны добавить свою собственную перед импортом моделей Оскара. Тогда в вашем файле моделей будут две модели с одинаковым именем в приложении, Django будет использовать только первую.
Пример: для добавления активного поля в модель продукта:
# yourappsfolder/catalogue/models.py
from django.db import models
from oscar.apps.catalogue.abstract_models import AbstractProduct
class Product(AbstractProduct):
active = models.BooleanField(default=False)
from oscar.apps.catalogue.models import *
Создайте файл «admin.py» в локальном приложении.
yourappsfolder / каталог / admin.py
из импорта oscar.apps.catalogue.admin *
Затем скопируйте каталог «migrations» из oscar / apps / catalog и поместите его в новое приложение локального каталога.
Добавил его как приложение Django, заменив приложение Оскара своим собственным в INSTALLED_APPS.
settings.py
из импорта оскаров get_core_apps
INSTALLED_APPS = [
...,
# все ваши не-Оскар приложения
] + get_core_apps (['yourappsfolder.catalogue'])
ПРИМЕЧАНИЕ: get_core_apps ([]) вернет список основных приложений Oscar или, если вы предоставите список ваших пользовательских приложений, они заменят основные приложения Oscar.
- Наконец, создайте миграции с помощью команды управления «makemigrations» и примените миграции с помощью команды управления «migrate catalog». Затем вы можете увидеть, что в модель продукта добавлен новый столбец.
Шаги для настройки URL:
Выполните те же действия, описанные выше при настройке приложения.
В Оскаре каждое приложение будет иметь свои собственные URL-адреса в файле «app.py», и каждое приложение будет иметь экземпляр приложения со свойством «urls», которое используется для доступа к списку URL-адресов приложения.
Измените файл yourproject / urls.py, включив в него URL-адреса Оскара.
из django.conf.urls import include, url
из приложения для импорта yourproject.app
urlpatterns = [
# Ваши другие URL
url (r '', include (application.urls)),
]
Чтобы изменить URL-адрес приложения корзины с «корзины» на «корзину», необходимо настроить экземпляр корневого приложения, создав его подкласс и переопределив метод «get_urls».
yourproject / app.py
из приложения импорта оскар
Класс магазина (app.Shop):
def get_urls (self):
urlpatterns = [
url (r '^ cart /', include (self.basket_app.urls)),
# ...
# Повторяющиеся ссылки здесь
]
вернуть urlpatterns
application = Shop ()
Действия по настройке или добавлению представлений в приложение:
Выполните те же действия, описанные выше при настройке приложения.
Создание нового класса представления или подкласса представления Оскара в файле views.py:
Пример: добавить дополнительный контекст на домашнюю страницу.
from oscar.apps.promotions.views import HomeView as CoreHomeView
class HomeView(CoreHomeView):
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
context["latest_products"] = Product.objects.filter(
parent=None).order_by('-date_created')
return context
Имейте в виду, что вам не нужно импортировать всеl (*) из приложения django oscar здесь в представлениях.
Эту помощь я получил из блога MicroPyramid.