私は自分のコードではうまくいくと思ったソリューションをいくつか見てきましたが、何もしていないようです。Python/Django - 文字列またはバイトのようなオブジェクトを期待しています
私はJSONファイルからデータを取り出し、配列に情報を追加しようとしています。配列は、データベースに追加するいくつかのオブジェクトにデータを入力するために使用されます(これはひどく非効率ですが、元のスクリプトを書き込んだ方法でデータベースにオブジェクトを追加する必要はありませんでした。それを変更する計画)。
オブジェクトには、関連する日付時刻が含まれています。 Pythonのstrptime関数を使用して文字列をdatetimeオブジェクトに変換しました。
私のmodels.pyには、datetimeのDateTimeFieldがあります。
私がしようとすると移行する場合は、しかし、私は次のエラーを取得する:ここで
TypeError: expected string or bytes-like object
が全体のトレースバックです:参考
Applying interactive_table.0016_auto_20161024_2259...Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/core/management/base.py", line 294, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/core/management/base.py", line 345, in execute
output = self.handle(*args, **options)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 204, in handle
fake_initial=fake_initial,
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/migrations/executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/migrations/migration.py", line 129, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/migrations/operations/fields.py", line 84, in database_forwards
field,
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py", line 231, in add_field
self._remake_table(model, create_fields=[field])
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py", line 113, in _remake_table
self.effective_default(field)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/backends/base/schema.py", line 221, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 755, in get_db_prep_save
prepared=False)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 1438, in get_db_prep_value
value = self.get_prep_value(value)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 1417, in get_prep_value
value = super(DateTimeField, self).get_prep_value(value)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 1275, in get_prep_value
return self.to_python(value)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 1378, in to_python
parsed = parse_datetime(value)
File "/Users/andrewho/anaconda/lib/python3.5/site-packages/django/utils/dateparse.py", line 93, in parse_datetime
match = datetime_re.match(value)
、ここに私のviews.pyです:
def getInfo(counter, hekJSON):
for counter in range(len(hekJSON["Events"])):
dateAndTimeHEK.append(convertTimes(hekJSON["Events"][counter]["startTime"]))
xcen.append(float("%.2f" % hekJSON["Events"][counter]["xCen"]))
ycen.append(float("%.2f" % hekJSON["Events"][counter]["yCen"]))
xfov.append(float("%.2f" % hekJSON["Events"][counter]["raster_fovx"]))
yfov.append(float("%.2f" % hekJSON["Events"][counter]["raster_fovy"]))
sciObj.append(hekJSON["Events"][counter]["sciObjectives"])
def convertTimes(dateAndTime):
dateTime = datetime.datetime.strptime(dateAndTime, '%Y-%m-%d %H:%M:%S')
return dateTime
def display(request):
noaaNmbr='11809'
#for right now, this is the only active region that I'm pulling data for. When I get the graph up and running, I will make it more interactive for the user so that he can
urlData = "http://www.lmsal.com/hek/hcr?cmd=search-events3&outputformat=json&instrument=IRIS&noaanum="+ noaaNmbr +"&hasData=true"
webUrl = urlopen(urlData)
counter = 0
data = webUrl.read().decode('utf-8')
hekJSON = json.loads(data)
getInfo(counter, hekJSON)
for i in range(getNumberOfEntries(hekJSON)):
observation = models.HEK_Observations(noaaNmbr=noaaNmbr, dateAndTime=dateAndTimeHEK[i], xcen=xcen[i], ycen=ycen[i], xfov=xfov[i], yfov=yfov[i], sciObj=sciObj[i])
observation.save()
return render(request, 'template.html', {'obj': models.HEK_Observations.objects.filter(noaaNmbr=noaaNmbr)})
ここは私のmodels.pyです:
from django.db import models
import datetime
class HEK_Observations(models.Model):
dateAndTime = models.DateTimeField(max_length = 40, default = None, verbose_name = 'Date And Time')
ここでは私のurls.pyです:類似した問題へ
他の解決策は、問題は私のデフォルト値であると述べています。しかし、(コードに示されているような)デフォルトを設定しないと、私は同じエラーを受けます。
第1に、これは移行中に発生しているため、移行する必要はありませんか?あなたの問題には関係しませんが、実際にはPythonでループを実行する方法を学ぶ必要があります。ヒント: 'for x in range(len(何でも))'は恐ろしい反パターンです。 –
@DanielRosemanマイグレーションを「表示する」とは、マイグレーションフォルダに作成された実際のファイルを表示することですか? –