Python Django 1.11-如何将高度字段和宽度字段与ImageField一起使用

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)

我已经定义了以下模型,它在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)

    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()