python - 无法将图像上传到 Django 管理员
问题描述
我正在从事电子商务项目,我被困在这个问题上。每当管理员添加新产品时,它还应该添加与产品相关的图像。所以我添加了带有 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'
我尝试使用转义但它仍然不显示图像。我正在使用 MySQL 现有数据库。我真的可以使用帮助。谢谢
解决方案
目前,您将图像作为字节存储在数据库中,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'>
推荐阅读
- firebase - Firebase 设置方法未将数据添加到现有集合
- python - 如果 django 上的其他表中已存在 ID,如何禁用或隐藏分配/重定向按钮
- c# - 是否有一种内置方法可以让异步方法在完成时触发带有返回数据的事件?
- python - 将 pk 传递给 django 中的 CreateView 表单
- ruby - 如何将字段添加到 ElasticSearch 以便在 ruby gem SearchKick 中按其排序
- c - 是否允许优化的输出变量保持超出其范围的值?
- python - BeautifulSoup 上的重复打印和错误打印
- c++ - 为什么下面的代码会导致分段错误(SIGSEGV)?
- python-3.x - tqdm 以人类可读的单位显示下载
- fortran - FORTRAN 77 除以零行为