Python Django 1.11-如何将高度字段和宽度字段与ImageField一起使用
我已经定义了以下模型,它在Django应用程序中用于存储不同维度的图像Python Django 1.11-如何将高度字段和宽度字段与ImageField一起使用,python,django,django-rest-framework,imagefield,django-1.11,Python,Django,Django Rest Framework,Imagefield,Django 1.11,我已经定义了以下模型,它在Django应用程序中用于存储不同维度的图像 class Image(models.Model): def _img_path(instance, filename): # file will be uploaded to MEDIA_ROOT/<instance.path>/<filename> return '{0}/{1}'.format(instance.path, filename)
class Image(models.Model):
def _img_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/<instance.path>/<filename>
return '{0}/{1}'.format(instance.path, filename)
id = models.AutoField(primary_key=True)
path = models.CharField(max_length=500)
img = models.ImageField(upload_to=_img_path, max_length=500, height_field='img_height', width_field='img_width')
img_md = models.ImageField(upload_to=_img_path, max_length=500, height_field='img_height', width_field='img_width', null=True)
img_sm = models.ImageField(upload_to=_img_path, max_length=500, height_field='img_height', width_field='img_width', null=True)
img_xs = models.ImageField(upload_to=_img_path, max_length=500, height_field='img_height', width_field='img_width', null=True)
我不知道为什么,但我得到了一个属性错误
:
'Image' object has no attribute 'img_width'
回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/api/products/1/drawings/add/
Django Version: 1.11.2
Python Version: 3.6.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'product',
'brand']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
489. response = self.handle_exception(exc)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
449. self.raise_uncaught_exception(exc)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
486. response = handler(request, *args, **kwargs)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/generics.py" in post
192. return self.create(request, *args, **kwargs)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/mixins.py" in create
21. self.perform_create(serializer)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/mixins.py" in perform_create
26. serializer.save()
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/rest_framework/serializers.py" in save
215. self.instance = self.create(validated_data)
File "~/Documents/Django projects/myapp/product/api/serializers.py" in create
202. drawing.img.save(filename, File(open('temp_files/'+filename, 'rb')), save=False)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/db/models/fields/files.py" in save
95. setattr(self.instance, self.field.name, self.name)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/db/models/fields/files.py" in __set__
377. self.field.update_dimension_fields(instance, force=True)
File "/anaconda/envs/myapp-env/lib/python3.6/site-packages/django/db/models/fields/files.py" in update_dimension_fields
464. (self.width_field and not getattr(instance, self.width_field)) or
Exception Type: AttributeError at /api/products/1/drawings/add/
Exception Value: 'ImageModel' object has no attribute 'img_width'
我认为属性height_字段和width_字段是自动解析的。
如何正确使用它们?您需要在模型中添加列 名称与参数值相等:高度_字段、宽度_字段
class Image(models.Model):
img_width = models.PositiveIntegerField()
img_height = models.PositiveIntegerField()
您可以在此处和源代码中阅读请显示完整错误stack@BearBrown我刚刚添加了回溯。问题出在
update\u dimension\u fields
方法下,但我不知道如何解决。嗨@BearBrown,我试图将模型的名称从Image
更改为ImageModel
,但我仍然收到相同的错误。
class Image(models.Model):
img_width = models.PositiveIntegerField()
img_height = models.PositiveIntegerField()