回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在Django应用程序中使用Cloudinary来存储和服务用户在我的站点的一个视图中上传的图像。图像已正确上载和显示;但是,在我的UpdateView中,当用户选中“清除”以删除以前的图像,然后提交表单时,会显示此错误:</p>
<blockquote>
<p>TypeError: expected string or bytes-like object</p>
</blockquote>
<p>浏览器中的错误页面还显示以下突出显示的消息:</p>
<blockquote>
<p>...\lib\site-packages\cloudinary\models.py in to_python
return self.parse_cloudinary_resource(value) ...</p>
<p>...\lib\site-packages\cloudinary\models.py in parse_cloudinary_resource
m = re.match(CLOUDINARY_FIELD_DB_RE, value) ...</p>
<p>...\AppData\Local\Programs\Python\Python36-32\lib\re.py in match
return _compile(pattern, flags).match(string) </p>
</blockquote>
<p>我的模型、视图和表单如下所示:</p>
<p>在模型.py公司名称:</p>
<pre><code>class Item(models.Model):
name = models.CharField(max_length=255)
image1 = CloudinaryField('image', blank=True, null=True)
</code></pre>
<p>在视图.py在</p>
^{pr2}$
<p>在表单.py在</p>
<pre><code>class ItemForm(forms.ModelForm):
image1 = CloudinaryFileField(
required=False,
options = {'crop': 'limit', 'width': 546, 'height': 1000,})
class Meta:
model = models.Item
fields = ("image1", "name")
</code></pre>
<p>我认为当字段的值为空时,Cloudinary仍然需要一些东西。我看过文件,搜索过网络,但我不知道怎么解决这个问题。在</p>
<p><strong>编辑:</strong>我检查了我的管理员,试图从那里编辑一个项目,但当我选中“清除”复选框并单击“保存”时,也出现了同样的错误。所以问题似乎出在我的模型上如何创建image1字段,因为管理视图只依赖于此。但我还是不知道怎么解决它。在</p>
<p><strong>编辑2:</strong>我在图像字段上选中“清除”并单击“保存”时的完整回溯,来自管理员:</p>
<blockquote>
<p>Environment:</p>
<p>Request Method: POST Request URL:
<a href="http://127.0.0.1:8000/admin/items/item/4/change/" rel="nofollow noreferrer">http://127.0.0.1:8000/admin/items/item/4/change/</a></p>
<p>Django Version: 1.11.1 Python Version: 3.6.1 Installed Applications:
['django.contrib.admin',</p>
<p>'django.contrib.auth',</p>
<p>'django.contrib.contenttypes',</p>
<p>'django.contrib.humanize',</p>
<p>'django.contrib.sessions',</p>
<p>'django.contrib.messages',</p>
<p>'django.contrib.staticfiles',</p>
<p>'django.contrib.sites',</p>
<p>'cloudinary',</p>
<p>'allauth',</p>
<p>'allauth.account',</p>
<p>'allauth.socialaccount',</p>
<p>'allauth.socialaccount.providers.google',</p>
<p>'allauth.socialaccount.providers.twitter',</p>
<p>'haystack',</p>
<p>'items']</p>
<p>Installed Middleware:
['django.middleware.security.SecurityMiddleware',</p>
<p>'django.contrib.sessions.middleware.SessionMiddleware',<br/>
'django.middleware.common.CommonMiddleware',<br/>
'django.middleware.csrf.CsrfViewMiddleware',<br/>
'django.contrib.auth.middleware.AuthenticationMiddleware',<br/>
'django.contrib.messages.middleware.MessageMiddleware',<br/>
'django.middleware.clickjacking.XFrameOptionsMiddleware']</p>
<p>Traceback:</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\core\handlers\exception.py"
in inner
41. response = get_response(request)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\core\handlers\base.py"
in _get_response
187. response = self.process_exception_by_middleware(e, request)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\core\handlers\base.py"
in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\contrib\admin\options.py"
in wrapper
551. return self.admin_site.admin_view(view)(*args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\utils\decorators.py"
in _wrapped_view
149. response = view_func(request, *args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\views\decorators\cache.py"
in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\contrib\admin\sites.py"
in inner
224. return view(request, *args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\contrib\admin\options.py"
in change_view
1511. return self.changeform_view(request, object_id, form_url, extra_context)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\utils\decorators.py"
in _wrapper
67. return bound_func(*args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\utils\decorators.py"
in _wrapped_view
149. response = view_func(request, *args, **kwargs)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\utils\decorators.py"
in bound_func
63. return func.<strong>get</strong>(self, type(self))(*args2, **kwargs2)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\contrib\admin\options.py"
in changeform_view
1408. return self._changeform_view(request, object_id, form_url, extra_context)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\contrib\admin\options.py"
in _changeform_view
1440. if form.is_valid():</p>
<p>File "D:\projects\django\gia\lib\site-packages\django\forms\forms.py"
in is_valid
183. return self.is_bound and not self.errors</p>
<p>File "D:\projects\django\gia\lib\site-packages\django\forms\forms.py"
in errors
175. self.full_clean()</p>
<p>File "D:\projects\django\gia\lib\site-packages\django\forms\forms.py"
in full_clean
386. self._post_clean()</p>
<p>File "D:\projects\django\gia\lib\site-packages\django\forms\models.py"
in _post_clean
396. self.instance.full_clean(exclude=exclude, validate_unique=False)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\db\models\base.py" in
full_clean
1226. self.clean_fields(exclude=exclude)</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\db\models\base.py" in
clean_fields
1268. setattr(self, f.attname, f.clean(raw_value, self))</p>
<p>File
"D:\projects\django\gia\lib\site-packages\django\db\models\fields__init__.py"
in clean
601. value = self.to_python(value)</p>
<p>File "D:\projects\django\gia\lib\site-packages\cloudinary\models.py"
in to_python
74. return self.parse_cloudinary_resource(value)</p>
<p>File "D:\projects\django\gia\lib\site-packages\cloudinary\models.py"
in parse_cloudinary_resource
50. m = re.match(CLOUDINARY_FIELD_DB_RE, value)</p>
<p>File
"C:\Users\samee\AppData\Local\Programs\Python\Python36-32\lib\re.py"
in match
172. return _compile(pattern, flags).match(string)</p>
<p>Exception Type: TypeError at /admin/items/item/4/change/ Exception
Value: expected string or bytes-like object</p>
</blockquote>