Django Migrate:TypeError:int()参数必须是字符串或数字,而不是' User'

时间:2015-08-22 04:22:14

标签: django django-models django-authentication django-migrations

我已对model.py应用了一些更改,当我应用makemigrations时,它运行正常。但在此之后,migrate命令会出现以下错误。

TypeError: int() argument must be a string or a number, not 'User' 这是Traceback:

Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, mess, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying mess.0003_auto_20150821_1912...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 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 444, 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 148, 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 179, 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 77, in _remake_table
self.effective_default(field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 211, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 1956, in get_db_prep_save
return self.related_field.get_db_prep_save(value, connection=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 977, 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 985, in get_prep_value
return int(value)
TypeError: int() argument must be a string or a number, not 'User'

这是我的models.py

from django.db import models
from django import forms
from django.contrib.auth.models import User as auth_user 
class Student(models.Model):
    user = models.OneToOneField(auth_user) #rollno
    rollno = models.IntegerField()
    password = models.CharField(max_length=50)
    fullname = models.CharField(max_length=200)
    email = models.EmailField()


class Banking(models.Model):

    student = models.OneToOneField(Student)
    breakfastcount = models.IntegerField(default=0)
    lunchcount  = models.IntegerField(default=0)
    dinnercount = models.IntegerField(default=0)

class Meal(models.Model):
    mealname=models.CharField(max_length=20)
    mealcost=models.IntegerField(default=0)
    MEALS = (('BREAKFAST','Break Fast'),
             ('LUNCH','Lunch'),
             ('DINNER','Dinner'))
class Booking(models.Model):
     student=models.OneToOneField(Student)
     date = models.DateField( editable=True )
     meal=models.CharField(max_length = 20, choices=MEALS)

任何人都可以帮助我TypeError吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

解决了这个问题。这是机票#23454下code.Django中的错误 的 https://code.djangoproject.com/ticket/23454

但由于信息不足,此错误已被关闭。

我创建了一个新应用,并将文件替换为较旧的应用,makemigrations以及migrate成功运行。

我认为如果我们在首次迁移后尝试更改Django Auth系统,就会出现此问题。

谢谢

答案 1 :(得分:0)

  

这意味着什么?

您的函数get_prep_value正在返回此

return int(value) -> Type of value is User object
  

但它应该是 int或string类型(仅当它是一个有效的整数时)   用双引号括起来,如“1”,否则会引发异常)

由于您尚未共享该功能,我建议以下内容

  1. 检查您传入的值。
  2. 在返回语句之前使用type (value),以便了解您在值变量中的内容。
  3.   

    在这里阅读关于int()的内容,这可能让你感到困惑

    python int( ) function