Не могу загрузить изображения в Django Admin - PullRequest
1 голос
/ 20 июня 2020

Я работаю над проектом электронной коммерции и застрял на этом. Всякий раз, когда администратор добавляет новый продукт, он также должен добавлять изображение, связанное с продуктом. Итак, я добавил столбец с ImageField, но я снова и снова получаю ошибку. Вот мой код для моделей

class Product(models.Model):
    product_id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100, blank=True, null=True)
    image = models.ImageField(db_column='image' , blank=True, null=True)
    info = models.CharField(max_length=500, blank=True, null=True)
    
    def image_tag(self):
        if self.image:
            return mark_safe('<img src="%s"/>' % self.image.url)
        else:
            return 'No Image Found'
    image_tag.short_description = 'Image'

и в admin.py

class ProductAdmin(admin.ModelAdmin):
    list_display = ('product_id', 'name','image_tag', 'info')
    readonly_fields = ('image',)

admin.site.register(Product, ProductAdmin)

Но каждый раз, когда я получаю эту ошибку

Exception Type: AttributeError
Exception Value:'bytes' object has no attribute 'url'

, я пытался использовать escape, но он все еще не отображает изображения. Я использую MySQL существующую базу данных. Мне действительно нужна помощь. Спасибо

1 Ответ

0 голосов
/ 20 июня 2020

В настоящее время вы сохраняете изображение в своей базе данных в байтах, что Django не предпочитает, вместо этого вы должны сначала указать MEDIA_ROOT это папка, в которой будет сохранено ваше изображение, и в базе данных будет сохранен только URL-адрес. Документы [ИСТОЧНИК]

Я предполагаю, что вы уже установили MEDIA настройки и установили Pillow. Ваш ImageField будет выглядеть как

# No need to specify db_column as Django already stores by default field's name.
image = models.ImageField(upload_to='users/%Y/%m/%d/', blank=True, null=True)

Теперь в ваших шаблонах вы можете получить изображение,

<img src="http://127.0.0.1:8000/media/{{ profile.photo }}" id='profile-photo'>
...