简体   繁体   English

django - 类型错误:预期的字符串或缓冲区

[英]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 datetimedate对象,但有一个未公开的特性,即能够自动将字符串解析为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM