Как загрузить файл или изображение с Django Oscar Dashboard? - PullRequest
0 голосов
/ 25 июня 2019

Итак, я попытался изменить ProductClass от Django Oscar. Он отлично работает, если я попытался загрузить изображение из Django Rest API, как показано ниже:

enter image description here

Но когда я пытался загрузить изображение с панели администратора Django Oscar, оно всегда возвращало ноль.

enter image description here

Вот моя модель:

enter image description here

Вот мой взгляд: enter image description here

И ниже моя панель инструментов / catalog / forms.py

enter image description here

Что мне нужно изменить или расширить, чтобы я мог загрузить изображение с помощью панели администратора Django Oscar?

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Вам необходимо реализовать этот класс представления для загрузки с панели управления django oscar, как описано выше -

class ProductCreateUpdateView(generic.UpdateView):

он находится здесь.

oscar/apps/dashboard/catalogue/views.py
0 голосов
/ 29 июня 2019

Oscar's ImageInput - довольно специфический виджет, предназначенный только для работы с набором форм изображений - как в форме редактирования продукта.Он полагается на Javascript для правильного заполнения значения поля ввода при выборе изображения.Этот Javascript не будет работать за пределами набора форм.

Возможно, в этом случае вам лучше использовать стандартный виджет.

Если вам нужна возможность предварительного просмотра выбранного изображения (и это все, что действительно добавляет ImageInput), вам нужно написать собственный виджет, который делает это.Соответствующий JS для этого находится здесь: https://github.com/django-oscar/django-oscar/blob/b627fa7954d284190cfe7c8c75da0528a6dd6bf7/src/oscar/static/oscar/js/oscar/dashboard.js#L7-L14

0 голосов
/ 25 июня 2019

Поскольку вы не предоставили предварительный просмотр views.py для своей настройки, довольно сложно объяснить и решить вашу проблему. Но я бы объяснил, как можно настроить или настроить любое приложение / модель / представление django oscar.

Чтобы настроить модели, представления и URL-адреса, вам необходимо создать основное приложение Oscar, в котором находится модель / представление. Тогда вы сможете переопределить любые классы модели / вида.

Шаги, чтобы раскрутить / настроить приложение:

  1. Если вы разветвляете приложение Оскар впервые, вам нужно создать корневую папку приложений, в которой будут находиться все ваши разветвленные приложения:

    $ mkdir yourappsfolder $ touch yourappsfolder / init .py

  2. Создайте модуль python с той же «меткой приложения», что и приложение Oscar:

Пример: настройка приложения oscar.apps.catalogue

$ mkdir yourappsfolder/catalogue
$ touch yourappsfolder/catalogue/__init__.py
  1. Если в приложении 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 *
  1. Создайте файл «admin.py» в локальном приложении.

    yourappsfolder / каталог / admin.py

    из импорта oscar.apps.catalogue.admin *

  2. Затем скопируйте каталог «migrations» из oscar / apps / catalog и поместите его в новое приложение локального каталога.

  3. Добавил его как приложение Django, заменив приложение Оскара своим собственным в INSTALLED_APPS.

    settings.py

    из импорта оскаров get_core_apps INSTALLED_APPS = [ ..., # все ваши не-Оскар приложения ] + get_core_apps (['yourappsfolder.catalogue'])

ПРИМЕЧАНИЕ: get_core_apps ([]) вернет список основных приложений Oscar или, если вы предоставите список ваших пользовательских приложений, они заменят основные приложения Oscar.

  1. Наконец, создайте миграции с помощью команды управления «makemigrations» и примените миграции с помощью команды управления «migrate catalog». Затем вы можете увидеть, что в модель продукта добавлен новый столбец.

Шаги для настройки URL:

  1. Выполните те же действия, описанные выше при настройке приложения.

  2. В Оскаре каждое приложение будет иметь свои собственные URL-адреса в файле «app.py», и каждое приложение будет иметь экземпляр приложения со свойством «urls», которое используется для доступа к списку URL-адресов приложения.

    • Измените файл yourproject / urls.py, включив в него URL-адреса Оскара.

      из django.conf.urls import include, url из приложения для импорта yourproject.app urlpatterns = [ # Ваши другие URL url (r '', include (application.urls)), ]

  3. Чтобы изменить URL-адрес приложения корзины с «корзины» на «корзину», необходимо настроить экземпляр корневого приложения, создав его подкласс и переопределив метод «get_urls».

    yourproject / app.py

    из приложения импорта оскар Класс магазина (app.Shop): def get_urls (self): urlpatterns = [ url (r '^ cart /', include (self.basket_app.urls)), # ... # Повторяющиеся ссылки здесь ] вернуть urlpatterns application = Shop ()

Действия по настройке или добавлению представлений в приложение:

  1. Выполните те же действия, описанные выше при настройке приложения.

  2. Создание нового класса представления или подкласса представления Оскара в файле 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.

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