Галерея изображений Django 1.11 с Django Filer

Проблема

Мне нужно отобразить галерею изображений на странице продукта. Это работало, когда мы работали с Django 1.6, но с тех пор мы обновились до Django 1.11 (Big Process). Теперь я застрял в том, как заставить это работать в новой среде. Прямо сейчас нажатие Add Image вызывает всплывающее окно, в котором я могу выбрать изображение и регионы, связанные с ним (США, Канада, Испания и т. д.), но после нажатия «Сохранить» заголовок всплывающего окна меняется на Popup closing... и никогда не закрывается - также изображение не добавляется в галерею. Изображение, которое я загружаю, добавляется к остальным изображениям в файле, однако оно не добавляется в модель ProductGallery.

Что у меня есть

Джанго: 1.11.7

Джанго-Файлер: 1.2.7

Костюм Джанго: 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 Image(CountryInfoModel, models.Model):
    image = FilerImageField(null=True, blank=True)

    def __str__(self):
        return str(self.image.name or self.image.original_filename)

У меня есть представление для добавления новых медиа, например:

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. Я был бы рад предоставить больше контекста, если это необходимо, и любая помощь очень ценится.


person BMoe872    schedule 14.11.2017    source источник


Ответы (1)


На всякий случай, если кто-то еще столкнется с этим и захочет узнать, как это было исправлено.

Оказывается, некоторые функции шаблона django-admin были перезаписаны и вызывали некоторые проблемы.

В частности, в этом проекте были перезаписаны части функциональности кнопки сохранения. Функция dismissAddRelatedObjectPopup раньше называлась dismissAddAnotherPopup

Эти функции были перезаписаны, чтобы предоставить пользовательские функции, описанные выше, в ProductGallery. Django начал вызывать функцию, но это вызывало ошибку во всплывающем окне, связанную с чем-то под названием SelectBox, что затем прерывало вызов ajax, необходимый для правильного сохранения модели.

Надеюсь, это может помочь кому-то в будущем!

person BMoe872    schedule 15.11.2017