Python 带有Django文件管理器的Django 1.11图像库 问题

Python 带有Django文件管理器的Django 1.11图像库 问题,python,django,image,django-filer,Python,Django,Image,Django Filer,我需要在产品页面上显示图像库。当我们在Django1.6时,它就起作用了,但后来升级到了Django1.11(大过程)。我现在被困在如何让它在新环境中工作。现在单击添加图像会弹出一个弹出窗口,我可以在其中选择图像以及与其相关的区域(美国、加拿大、西班牙等),但单击“保存”后,弹出窗口标题将更改为弹出窗口关闭…,并且从不关闭-图像也不会添加到图库中。我上传的图像本身会添加到文件管理器中的其余图像中,但不会添加到ProductGallery模型中 我所拥有的 Django:1.11.7 Django

我需要在产品页面上显示图像库。当我们在Django1.6时,它就起作用了,但后来升级到了Django1.11(大过程)。我现在被困在如何让它在新环境中工作。现在单击
添加图像
会弹出一个弹出窗口,我可以在其中选择图像以及与其相关的区域(美国、加拿大、西班牙等),但单击“保存”后,弹出窗口标题将更改为
弹出窗口关闭…
,并且从不关闭-图像也不会添加到图库中。我上传的图像本身会添加到文件管理器中的其余图像中,但不会添加到ProductGallery模型中

我所拥有的 Django:1.11.7

Django文件管理器:1.2.7

Django西服:0.2.25

普通视图:1.0.4

我有产品模型,这些产品与ProductGallery模型有多对多关系,如下所示:

class Product(models.Model):
    gallery = models.ManyToManyField('products.ProductGallery')
ProductGallery应该包含图像和视频,允许上传其中任何一个,并提供一个列表,以便在前端重复显示

ProductGallery定义为:

class ProductGallery(models.Model):
    limit = models.Q(app_label='media', model='image') | models.Q(app_label='media', model='video')

    order = models.PositiveIntegerField(default=0)
    content_type = models.ForeignKey(ContentType, limit_choices_to=limit)
    object_id = models.PositiveIntegerField(db_index=True)
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    class Meta:
        ordering = ('order',)

    def __str__(self):
        return six.text_type(self.content_object)
其中
media.image
定义为:(我暂时忽略视频)

我对添加新媒体有如下看法:

class AddMedia(LoginRequiredMixin, StaffuserRequiredMixin, JsonRequestResponseMixin, GenericView):
    require_json = True

    def post(self, request, *args, **kwargs):
        object_id = self.request_json["objectId"]
        object_var = self.request_json["objectVarName"]
        content_type_id = self.request_json["contentType"]
        order = self.request_json["order"]
        media_id = self.request_json["mediaId"]
        media_type = self.request_json["mediaType"]

        content_type = _get_content_type_or_404(content_type_id)
        content_object = _get_object_or_404(content_type, object_id)
        model_var = getattr(content_object, object_var)

        try:
            if media_type.lower() == "image":
                obj = Image.objects.get(pk=media_id)
            elif media_type.lower() == "video":
                obj = Video.objects.get(pk=media_id)
            else:
                raise Http404("Invalid mediaType parameter: {0}".format(media_type))
            media_item = model_var.create(content_object=obj)
            media_item.order = order
            media_item.save()
        except model_var.model.DoesNotExist:
            pass

        return self.render_json_response({'message': "Order successfully updated"})

我想这就是所有的部分。我不明白为什么单击“保存”时图像根本没有保存到ProductGallery模型。如果需要的话,我很乐意提供更多的上下文,非常感谢您的帮助。

以防万一其他人遇到这个问题,想知道它是如何修复的

事实证明,django管理模板的某些功能已被覆盖,并导致了一些问题

具体来说,此项目覆盖了部分“保存”按钮功能。函数
dismissAddRelatedObjectPopup
过去被命名为
dismissAddAnotherPopup

这些函数被覆盖,以提供上述ProductGallery的自定义功能。Django去调用该函数,但这在弹出窗口上抛出了一个错误,该弹出窗口与名为
SelectBox
的内容相关,然后中断了正确保存模型所需的ajax调用

希望这能对将来的人有所帮助

class AddMedia(LoginRequiredMixin, StaffuserRequiredMixin, JsonRequestResponseMixin, GenericView):
    require_json = True

    def post(self, request, *args, **kwargs):
        object_id = self.request_json["objectId"]
        object_var = self.request_json["objectVarName"]
        content_type_id = self.request_json["contentType"]
        order = self.request_json["order"]
        media_id = self.request_json["mediaId"]
        media_type = self.request_json["mediaType"]

        content_type = _get_content_type_or_404(content_type_id)
        content_object = _get_object_or_404(content_type, object_id)
        model_var = getattr(content_object, object_var)

        try:
            if media_type.lower() == "image":
                obj = Image.objects.get(pk=media_id)
            elif media_type.lower() == "video":
                obj = Video.objects.get(pk=media_id)
            else:
                raise Http404("Invalid mediaType parameter: {0}".format(media_type))
            media_item = model_var.create(content_object=obj)
            media_item.order = order
            media_item.save()
        except model_var.model.DoesNotExist:
            pass

        return self.render_json_response({'message': "Order successfully updated"})