Показать много-много изображений полей на странице администратора рядом с самим полем - PullRequest
0 голосов
/ 10 марта 2020

Прежде всего, после прочтения этого вопроса, не стесняйтесь предлагать изменения для названия, потому что я не уверен, что набирать

У меня есть эта иерархия .. Stone -> Subtype -> Subtype -> Subtype, и это продолжается до тех пор, пока Stone имеет Subtype в реальной жизни. Так что неизвестно, сколько раз я добавлю Subtypes к указанному c камню. Давайте проверим это

# models.py

from django.db import models
from django.utils.safestring import mark_safe

class Stone(models.Model):
    name = ...
    sub_type = models.ForeignKey('StoneSubType', on_delete=models.DO_NOTHING ,related_name='stones', blank=True, null=True)



class StoneSubType(models.Model):
    name = ...
    sub_type = models.ManyToManyField('self', related_name='sub_types', blank=True)


class StoneSubtypeImage(models.Model):
    stone = models.ForeignKey('StoneSubType', on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(default=None, upload_to='stone_subtypes/')



class StoneImage(models.Model):
    stone = models.ForeignKey('Stone', on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(default=None, upload_to='stones/')

    def image_tag(self):
        return mark_safe(f'<img src="{self.image.url}">')

Давайте go страницу администратора, чтобы проиллюстрировать, что я хочу

enter image description here

Теперь, Каждый Subtype имеет несколько изображений, а само Stone имеет некоторые изображения, конечно, изображения, как показано в коде, поэтому я заставил их появиться на странице администратора в виде Inline, который отображается там, когда я прокручиваю вниз. Вот так

enter image description here

Теперь я хочу показать изображения Subtype рядом с полем Subtype. Любые предложения о том, как мы можем сделать это?

Мой лимит был на показ встроенных изображений на той же странице. Результаты поиска думают, что я этого хочу, но дело не в том

На данный момент я нашел решение. Но он не вставляет изображения рядом с их полем.

Это менеджер моделей подтипов

class StoneSubtypeAdmin(admin.ModelAdmin):
    inlines = [StoneSubtypeImagesInline]
    search_fields = ['name', 'category', 'price', 'color__name',]
    filter_horizontal = ['sub_type']

    fields = ['name', 'sub_type', 'sub_type_images', 'category', 'block_num', 'salab_num', 'barcode', 'commercial_size', 'price', 'details', 'town', 'country', 'color', 'surface' ]
    readonly_fields = ['sub_type_images']

    def sub_type_images(self, obj):
        if obj.sub_type is not None:
            output = ''  # html here

            for sub_type in obj.sub_type.all():
                for image in sub_type.images.all():
                    output += (
                        f'<div class="column">'
                        f'<h3 class="heading"> {obj.name} </h3>'
                        f'<a href="/admin/core/stonesubtype/{sub_type.pk}/"><img src="{image.image.url}" style="max-height: 300px"></a>'
                        f'</div>'
                    )
            output = f'<div class="image_grid"> {output}</div> <style> .image_grid {{display: grid; grid-template-columns: repeat(auto-fill, 250px); grid-template-rows: auto auto auto; .heading {{ font-size: 20p !important; display: inline-block; }} .column {{ display: flex; flex-direction: column }} </style>'
            return mark_safe(output)

, и он отображает изображения теперь под Subtype как отдельное поле. Решение становится ближе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...