如何从django oscar仪表板上传文件或图像?

时间:2019-06-25 06:51:44

标签: python django django-models django-oscar

因此,我尝试从Django Oscar修改ProductClass。 如果我尝试从Django Rest API上传图片,效果很好,如下所示:

enter image description here

但是当我尝试从Django Oscar管理控制台上传图像时,它总是返回null。

enter image description here

这是我的模特:

enter image description here

这是我的看法: enter image description here

下面是我的仪表板/目录/forms.py

enter image description here

我需要修改或扩展什么才能使用Django Oscar管理仪表板上传图像?

3 个答案:

答案 0 :(得分:0)

由于您没有为自定义提供任何views.py预览,因此很难解释和解决您的问题。但是我会解释一下如何创建或自定义任何django oscar应用程序/模型/视图。

为了自定义模型,视图和URL,您需要派生一个驻留有模型/视图的Oscar核心应用。然后,您应该可以覆盖任何模型/视图类。

创建/自定义应用程序的步骤:

  1. 如果您是第一次分叉Oscar应用程序,则必须创建一个根应用程序文件夹,其中所有分叉的应用程序都将存在于其中:

    $ mkdir yourapps文件夹 $ touch yourappsfolder / init .py

  2. 使用与Oscar应用相同的“应用标签”创建一个python模块:

例如:自定义oscar.apps.catalogue应用

$ mkdir yourappsfolder/catalogue
$ touch yourappsfolder/catalogue/__init__.py
  1. 如果Oscar应用程序具有models.py,则必须在本地应用程序中创建一个models.py文件。

    您的自定义模型在这里

    从oscar.apps.catalogue.models导入*

注意:要自定义Oscar的模型,必须在导入Oscar的模型之前添加自定义模型。然后,您的模型文件将在一个应用程序中具有两个名称相同的模型,Django将仅使用第一个。

Ex:将活动字段添加到产品模型中:

# 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”文件。

    您的应用文件夹/目录/admin.py

    from oscar.apps.catalogue.admin import *

  2. 然后从oscar / apps / catalogue复制“ migrations”目录,并将其放入新的本地目录应用中。

  3. 通过将INSTALLED_APPS中的Oscar应用替换为自己的应用,将其添加为Django应用。

    settings.py

    从oscar导入get_core_apps INSTALLED_APPS = [     ...,     #您所有的非奥斯卡应用 ] + get_core_apps(['yourappsfolder.catalogue'])

注意:get_core_apps([])将返回Oscar核心应用程序列表,否则,如果您提供自定义应用程序列表,它们将替换Oscar核心应用程序。

  1. 最后,使用“ makemigrations”管理命令创建迁移,并使用“ migrate catalogue”管理命令应用迁移。然后,您会看到新列已添加到产品模型中。

自定义网址的步骤:

  1. 遵循与自定义应用程序相同的步骤。

  2. 在Oscar中,每个应用程序在“ app.py”文件中都有自己的URL,每个应用程序都带有带有“ urls”属性的应用程序实例,该实例用于访问应用程序的URL列表。

    • 修改“ yourproject / urls.py”文件以包含Oscar URL。

      从django.conf.urls导入

      包括URL 从yourproject.app导入应用程序 urlpatterns = [    #您的其他网址    url(r'',include(application.urls)), ]

  3. 要将购物篮应用程序的网址从“购物篮”更改为“购物车”,您需要通过创建根应用程序实例的子类并覆盖“ get_urls”方法来自定义根应用程序实例。

    yourproject / app.py

    从oscar导入应用 类Shop(app.Shop):     def get_urls():         urlpatterns = [             url(r'^ cart /',include(self.basket_app.urls)),             #...             #这里的网址         ]         返回urlpatterns 应用程序= Shop()

自定义视图或向应用添加视图的步骤:

  1. 遵循与自定义应用程序相同的步骤。

  2. 在views.py文件中创建新的视图类或创建Oscar视图的子类:

例如:向主页添加额外的上下文。

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

请记住,您不需要在视图中从django oscar应用程序导入所有(*)。

我从MicroPyramid博客获得的帮助。

答案 1 :(得分:0)

您需要实现此视图类,才能从django oscar仪表板上传,如上所述-

class ProductCreateUpdateView(generic.UpdateView):

它位于这里。

oscar/apps/dashboard/catalogue/views.py

答案 2 :(得分:0)

Oscar的ImageInput是一个相当具体的小部件,仅用于处理图像的表单集-如产品编辑表单上的那样。选择图像时,它依靠Javascript正确填充输入字段的值。该Javascript无法在表单集之外运行。

在这种情况下,最好只使用默认小部件。

如果您确实希望能够显示所选图像的预览(实际上是ImageInput添加的全部内容),那么您将需要编写一个自定义窗口小部件来执行此操作。与此相关的JS在这里:https://github.com/django-oscar/django-oscar/blob/b627fa7954d284190cfe7c8c75da0528a6dd6bf7/src/oscar/static/oscar/js/oscar/dashboard.js#L7-L14