Django 1.11 Галерея изображений с Django Filer
проблема
Мне нужно отобразить галерею изображений на странице продукта. Это работало, когда мы были в Django 1.6, но с тех пор обновилось до Django 1.11 (Большой процесс). Теперь я застрял в том, как заставить это работать в новой среде. Щёлкнув Add Image
вызывает всплывающее окно, в котором я могу выбрать изображение и связанные с ним регионы (США, Канада, Испания и т. д.), но после нажатия "Сохранить" заголовок всплывающего окна изменяется на Popup closing...
и никогда не закрывается - также изображение не добавляется в галерею. Само изображение, которое я загружаю, добавляется к остальным изображениям в файлере, однако оно не добавляется в модель ProductGallery.
Что я получил
Джанго: 1.11.7
Джанго-Филер: 1.2.7
Джанго-Костюм: 0.2.25
Vanilla-Views: 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. Я был бы рад предоставить больше контекста, если это необходимо, и любая помощь очень ценится.
1 ответ
На всякий случай, если кто-то еще сталкивается с этим и хочет знать, как это было исправлено.
Оказывается, что некоторые функциональные возможности шаблона django-admin были перезаписаны и вызывали некоторые проблемы.
В частности, в этом проекте были перезаписаны части функциональности кнопки сохранения. Функция dismissAddRelatedObjectPopup
раньше был назван dismissAddAnotherPopup
Эти функции были перезаписаны для обеспечения пользовательских функций, описанных выше, в ProductGallery. Django пошел вызывать функцию, но это вызвало ошибку во всплывающем окне, связанное с чем-то, называемым SelectBox
который затем прервал вызов ajax, необходимый для правильного сохранения модели.
Надеюсь, это поможет кому-то в будущем!