[英]django - TypeError: expected string or buffer
Hello I added a field to a model and when I try to do migrate
in terminal it give me this error, does anyone know what this might be?您好,我向模型添加了一个字段,当我尝试在终端中进行migrate
,它给了我这个错误,有人知道这可能是什么吗?
========================================================================= ================================================== ========================
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 161, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/migrations/executor.py", line 68, in migrate
self.apply_migration(migration, fake=fake)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/migrations/executor.py", line 102, in apply_migration
migration.apply(project_state, schema_editor)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/migrations/migration.py", line 108, in apply
operation.database_forwards(self.app_label, schema_editor, project_state, new_state)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 139, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/schema.py", line 454, in alter_field
self._alter_field(model, old_field, new_field, old_type, new_type, old_db_params, new_db_params, strict)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py", line 199, in _alter_field
self._remake_table(model, alter_fields=[(old_field, new_field)])
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/sqlite3/schema.py", line 137, in _remake_table
self.create_model(temp_model)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/schema.py", line 212, in create_model
definition, extra_params = self.column_sql(model, field)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/schema.py", line 124, in column_sql
default_value = self.effective_default(field)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/backends/schema.py", line 187, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 627, in get_db_prep_save
prepared=False)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1290, in get_db_prep_value
value = self.get_prep_value(value)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1269, in get_prep_value
value = super(DateTimeField, self).get_prep_value(value)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1171, in get_prep_value
return self.to_python(value)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 1228, in to_python
parsed = parse_datetime(value)
File "/Users/Derek/.virtualenvs/tasks/lib/python2.7/site-packages/django/utils/dateparse.py", line 70, in parse_datetime
match = datetime_re.match(value)
TypeError: expected string or buffer
model.py模型.py
class Lead(models.Model):
title = models.CharField(choices=TITLE_CHOICES, max_length=20, blank=True, default='')
first_name = models.CharField(max_length=80, blank=True, default='')
last_name = models.CharField(max_length=80, blank=True)
company = models.CharField(max_length=80, blank=True)
position = models.CharField(max_length=50, blank=True, default='')
location = models.CharField(max_length=100, blank=True)
currently_using_sms = models.CharField(choices=CURRENTLY_USING_SMS, default='', max_length=30)
services_interested_in = models.ManyToManyField(Services)
phone_number = models.CharField(blank=True, max_length=20, default='')
mobile_number = models.CharField(blank=True, max_length=11, default='')
email = models.EmailField(blank='True', default='')
best_day_to_contact = models.DateTimeField(blank=False, null=True)
notes = models.TextField(blank=True)
assign_to = models.ForeignKey(User, db_index=True, blank=True, null=True, default=None)
lead_source = models.ForeignKey(LeadSource, db_index=True, blank=True, null=True)
status = models.CharField(choices=LEAD_STATUS, max_length=100, default='1')
Django's DateTimeField
generally works with Python datetime
and date
objects, but has an undocumented feature of being able to automatically parse strings into datetime
objects . Django 的DateTimeField
通常适用于 Python datetime
和date
对象,但有一个未公开的特性,即能够自动将字符串解析为datetime
对象。 In your DateTimeField
declaration, you had在您的DateTimeField
声明中,您有
default=False
which is neither datetime
nor date
.这既不是datetime
也不是date
。 Thus, Django tries to parse it automatically for you.因此,Django 会尝试自动为您解析它。 Failing to do so, it emits the cryptic message.如果不这样做,它会发出神秘的消息。
Depending on your specific need, you should either replace, or just remove the default=False
argument.根据您的特定需要,您应该替换或删除default=False
参数。
I believe that you have an error in default=False
of the following line:我相信您在以下行的default=False
中有错误:
completion_date = models.DateTimeField(blank=False, null=True, default=False)
False
is not a valid date default
expects. False
不是default
预期的有效日期。 Use default=datetime.now
instead.请改用default=datetime.now
。
I have the same issue before.我以前也有同样的问题。 I tried default=False but it doesn't make any change.我试过 default=False 但它没有做任何改变。 Then I add default=timezone.now, It works correctly.然后我添加 default=timezone.now,它工作正常。 Only problem is date field are not displayed in admin section.唯一的问题是日期字段未显示在管理部分。
change this field:更改此字段:
best_day_to_contact = models.DateTimeField(blank=False, null=True)
to this field:到这个领域:
from django.utils import timezone
best_day_to_contact = models.DateTimeField(default=timezone.now)
I think maybe your problem will fix with this solution.我想也许你的问题会用这个解决方案解决。
/* Example Model */
class user(models.Model):
created = models.DateField(auto_now_add=True)
def __str__(self):
return str(self.id)
/*When you generate migrations file then it will add (default=1)
*Remove default=1
*field=models.DateField(default=1, auto_now_add=True),
*To
*field=models.DateField(auto_now_add=True)
*Then do sqlmigrate or migrate.
*/
Just wanted to weigh in, as this issue gave me a big headache.只是想权衡一下,因为这个问题让我很头疼。 Django got caught on a bad migration for me after I added a models.DateField.在我添加了一个 models.DateField 之后,Django 陷入了一个糟糕的迁移。 It didn't fix itself until I deleted all migrations and reran makemigrations.直到我删除所有迁移并重新运行 makemigrations 后,它才自行修复。
Hope this helps!希望这可以帮助!
To solve this, you might be required to go back to your text editor and delete all migrations.要解决此问题,您可能需要返回文本编辑器并删除所有迁移。 It usually happens when django land in bad migrations.它通常发生在 django 进行不良迁移时。 After that re-do new migrations.之后重新进行新的迁移。 Hope this will solve your problem希望这能解决你的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.