SOAP Web サービスを介してファイルを取得し、django の FileField を使用してモデルに保存する必要があります。
私は次のことをしました:
SOAP ラッパーで、一時ディレクトリにファイルを保存します。
# ... get the file and file_name and decode put it into a variable called data
f = open('tmp/%s' % filename, 'w+')
f.write(data)
# build a dictionary with another useful metadata
ここには何もおかしくない(私は推測する)
次に、私の見解では、次のことを行います。
from django.core.files import File
for ext in extensions:
messages = helpers.get_new_messages(ext)
for msg in messages:
vm = VoiceMessage()
filename = '%s-%s' % (ext.t_account_name, msg['name'])
vm.extension = ext
vm.origin = msg['origin']
vm.date = msg['when']
vm.message.save(filename, File(msg['file'])) # Error is raised here
msg['file'].close()
vm.save()
そして、次のエラーが表示されます。
/account/dashboard/messages/ での TypeError は、予期される文字列またはバッファーです
私はすでにこの How to assign a local file to the FileField in Django? を試しました。
そしてこの Django - ファイルを作成してモデルのFileFieldに保存する方法は?
何か不足していますか?
2013 年 4 月 17 日編集: トレースバックの追加
私はそれをデバッグし、 type(msg['file']) 呼び出しが返されました:
<type 'file'>
すなわち:
<open file './voice_message_2013-4-15_22-41-58.au', mode 'w+' at 0xca0fe40>
そして、ここに完全なトレースバックがあります。
Internal Server Error: /account/dashboard/messages/
Traceback (most recent call last):
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 25, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/israelord/Work/4geeks/ringtu/ringtu/profiles/views.py", line 239, in account_dashboard_messages
vm.message.save(filename, File(msg['file']))
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/files.py", line 95, in save
self.instance.save()
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/base.py", line 546, in save
force_update=force_update, update_fields=update_fields)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/base.py", line 650, in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/manager.py", line 215, in _insert
return insert_query(self.model, objs, fields, **kwargs)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/query.py", line 1673, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 936, in execute_sql
for sql, params in self.as_sql():
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 894, in as_sql
for obj in self.query.objs
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 304, in get_db_prep_save
prepared=False)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 835, in get_db_prep_value
value = self.get_prep_value(value)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 820, in get_prep_value
value = self.to_python(value)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 788, in to_python
parsed = parse_datetime(value)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/utils/dateparse.py", line 67, in parse_datetime
match = datetime_re.match(value)
TypeError: expected string or buffer