Для изображений к записи в блоге используется модель:
# models.py
class PostBodyImage(models.Model):
image = models.ImageField("Изображение 960x570px", upload_to=get_post_body_media_path)
descript = models.CharField("Описание", max_length=100)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='body_images')
# admin.py
class BodyImagesInlines(admin.TabularInline):
form = PostBodyImageForm
model = PostBodyImage
fields = ('get_preview', 'image', 'descript')
readonly_fields = ('get_preview',)
def get_preview(self, obj):
if not obj.image:
return ''
im = get_thumbnail(obj.image, '168x100', crop='center', quality=99)
return mark_safe('<img src="{}">'.format(im.url))
get_preview.short_description = 'Превью'
class PostAdmin(admin.ModelAdmin):
form = PostImageControlForm
fields = ('count', 'status', 'get_preview_url', 'image', 'head_image', 'title', 'descript', 'body', 'main_post', 'category')
readonly_fields = ('count', 'get_preview_url',)
formfield_overrides = {
models.TextField: {'widget': forms.Textarea(attrs={'rows': '4', 'cols': '50'})}
}
list_display = ('title', 'get_category', 'main_post', 'count', 'status')
list_editable = ('main_post', 'status')
list_filter = ('category', 'main_post', 'status')
inlines = [
BodyImagesInlines,
]
def get_fields(self, request, obj=None):
"""Исключить поле превью из страницы создания поста"""
fields = list(super(PostAdmin, self).get_fields(request, obj))
if obj is None:
fields.remove('get_preview_url')
return fields
def get_category(self, obj):
return ',\n'.join([category.title for category in obj.category.all()])
def get_preview_url(self, obj):
return mark_safe('<a target="_blank" href="{}">{}</a>'.format(obj.get_preview_url(), obj.get_preview_url()))
get_preview_url.short_description = 'Превью'
admin.site.register(Post, PostAdmin)
Проблема в том, что если я добавляю по одному изображению все ок, но если добавить сразу несколько (в инлайнс) то они сохраняются без прав на чтение, соотвественно на страницу не подгружаются...