2016-04-20 19 views
4

django.Iのカスタムユーザモデルを拡張し、django公式サイトの貼り付けコードをコピーします。私はそれを移行したい場合には、それはエラースロー期待される文字列またはバッファ、date_re.match(値)djangoエラー

TypeError: expected string or buffer 

models.py

education=models.CharField(max_length=13) 

from django.db import models 
from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser 
) 


class MyUserManager(BaseUserManager): 
    def create_user(self, email, date_of_birth, password=None): 
     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      email=self.normalize_email(email), 
      date_of_birth=date_of_birth, 
     ) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, date_of_birth, password): 
     user = self.create_user(email, 
      password=password, 
      date_of_birth=date_of_birth 
     ) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 


class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
    ) 
    date_of_birth = models.CharField(max_length=20) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['date_of_birth'] 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    def __unicode__(self):    # __unicode__ on Python 2 
     return self.email 

    def has_perm(self, perm, obj=None): 
     "Does the user have a specific permission?" 
     return True 

    def has_module_perms(self, app_label): 
     "Does the user have permissions to view the app `app_label`?" 
     return True 

    @property 
    def is_staff(self): 
     "Is the user a member of staff?" 
     return self.is_admin 

admin.py

from django import forms 
    from django.contrib import admin 
    from django.contrib.auth.models import Group 
    from django.contrib.auth.admin import UserAdmin as BaseUserAdmin 
    from django.contrib.auth.forms import ReadOnlyPasswordHashField 

    from .models import MyUser 


    class UserCreationForm(forms.ModelForm): 
     password1 = forms.CharField(label='Password', widget=forms.PasswordInput) 
     password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) 

     class Meta: 
      model = MyUser 
      fields = ('email', 'date_of_birth') 

     def clean_password2(self): 
      password1 = self.cleaned_data.get("password1") 
      password2 = self.cleaned_data.get("password2") 
      if password1 and password2 and password1 != password2: 
       raise forms.ValidationError("Passwords don't match") 
      return password2 

     def save(self, commit=True): 
      user = super(UserCreationForm, self).save(commit=False) 
      user.set_password(self.cleaned_data["password1"]) 
      if commit: 
       user.save() 
      return user 


    class UserChangeForm(forms.ModelForm): 
     password = ReadOnlyPasswordHashField() 

     class Meta: 
      model = MyUser 
      fields = ('email', 'password', 'date_of_birth', 'is_active', 'is_admin') 

     def clean_password(self): 
      return self.initial["password"] 


    class UserAdmin(BaseUserAdmin): 
     form = UserChangeForm 
     add_form = UserCreationForm 
. 
     list_display = ('email', 'date_of_birth', 'is_admin') 
     list_filter = ('is_admin',) 
     fieldsets = (
      (None, {'fields': ('email', 'password')}), 
      ('Personal info', {'fields': ('date_of_birth',)}), 
      ('Permissions', {'fields': ('is_admin',)}), 
     ) 
     add_fieldsets = (
      (None, { 


      'classes': ('wide',), 
      'fields': ('email', 'date_of_birth', 'password1', 'password2')} 
     ), 
    ) 
    search_fields = ('email',) 
    ordering = ('email',) 
    filter_horizontal =() 

    admin.site.register(MyUser, UserAdmin) 
    admin.site.unregister(Group) 

エラートレースバック

Rendering model states... DONE 
    Applying app.0002_auto_20160420_0647...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 221, in handle 
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 110, in migrate 
    self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 147, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 115, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards 
    field, 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/schema.py", line 176, in add_field 
    self._remake_table(model, create_fields=[field]) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/schema.py", line 74, in _remake_table 
    self.effective_default(field) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 207, in effective_default 
    default = field.get_db_prep_save(default, self.connection) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 710, in get_db_prep_save 
    prepared=False) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 1322, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 1317, in get_prep_value 
    return self.to_python(value) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 1274, in to_python 
    parsed = parse_date(value) 
    File "/usr/local/lib/python2.7/dist-packages/django/utils/dateparse.py", line 60, in parse_date 
    match = date_re.match(value) 
TypeError: expected string or buffer 

0002_auto_20160420_0647.py

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.db import models, migrations 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('app', '0001_initial'), 
    ] 

    operations = [ 
     migrations.AlterModelOptions(
      name='myuser', 
      options={}, 
     ), 
     migrations.AlterModelManagers(
      name='myuser', 
      managers=[ 
      ], 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='contact', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='date_joined', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='education', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='first_name', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='groups', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='is_staff', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='is_superuser', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='last_name', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='name', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='user_permissions', 
     ), 
     migrations.RemoveField(
      model_name='myuser', 
      name='username', 
     ), 
     migrations.AddField(
      model_name='myuser', 
      name='date_of_birth', 
      field=models.DateField(default=1), 
      preserve_default=False, 
     ), 
     migrations.AddField(
      model_name='myuser', 
      name='is_admin', 
      field=models.BooleanField(default=False), 
     ), 
     migrations.AlterField(
      model_name='myuser', 
      name='email', 
      field=models.EmailField(unique=True, max_length=255, verbose_name=b'email address'), 
     ), 
     migrations.AlterField(
      model_name='myuser', 
      name='is_active', 
      field=models.BooleanField(default=True), 
     ), 
    ] 
+0

あなたは '移行/ 0002_auto_20160420_0647.py'の内容を投稿することができますか?私は、このPYファイル – Selcuk

+0

... –

+0

はなぜdate_of_birth' 'CharField'?'で見つけることができます – Sayse

答えて

1

の内容は、あなたの問題はあなたの移行ファイルに次の行です:

field=models.DateField(default=1), 

field=models.DateField(null=True), 

または

に変更し、それを
field=models.CharField(max_length=20), 
+0

彼らは何らかの理由ですでに変更しているので、 'AddField'全体を完全に削除することができます – Sayse

+0

モデルのこのdate_of_birthフィールドを変更する必要があります –

+0

@CpVermaそれはあなたのモデルの 'CharField'として、マイグレーションファイルのものを' CharField'にも変更します。 – Selcuk

0

はい、後ろにセミコロンをこの行のように、自動的にデータベース内のテーブルを変更するために削除されます。

signdate = models.DateField(verbose_name="Sign Date", blank=True, null=True) 
+0

これは元の質問にどのように答えますか? – norok2

関連する問題