<p>您正在向<code>some_file</code>字段传递一个字符串(<code>os.path.join()</code>的结果),但需要向其传递一个实际的<a href="https://docs.djangoproject.com/en/3.0/topics/files/#the-file-object" rel="nofollow noreferrer">^{<cd3>}</a>对象</p>
<p>直接在模型上保存文件的最简单方法是使用<a href="https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.fields.files.FieldFile.save" rel="nofollow noreferrer">^{<cd4>}'s ^{<cd5>}</a>方法</p>
<p>作为上述案例的工作解决方案,创建记录的有效方法是:</p>
<pre><code>instance = MyModel.objects.create(some_file=File(file=open(some_file, 'rb'), name='some_name.png'))
</code></pre>
<p>或者更好地使用<code>pathlib</code>动态获取名称:</p>
<pre><code>from pathlib import Path
instance = MyModel.objects.create(some_file=File(file=open(some_file, 'rb'), name=Path(some_file).name))
</code></pre>
<p>请注意,基于文件获取行不太可能起作用,因为每次打开文件时,使用<code>File</code>实例作为参数执行<code>get_or_create()</code>可能每次都会创建一个新行。最好将文件字段放入<code>defaults</code>:</p>
<pre><code>instance, created = MyModel.objects.get_or_create(
some_other_field=...,
defaults={'some_file': File(
file=open(some_file, 'rb'),
name=pathlib.Path(some_file).name
)}
)
</code></pre>