Sahal Sajjad
Sahal Sajjad

Reputation: 235

Django Migrate : TypeError: int() argument must be a string or a number, not 'User'

I have applied some changes to the model.py and when I applied makemigrations it worked fine. But after that, the migrate command gives the following error.

TypeError: int() argument must be a string or a number, not 'User' Here is the 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'

Here is my 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)

Can anybody help me with this TypeError ?

Thanks in advance.

Upvotes: 1

Views: 1480

Answers (2)

Sahal Sajjad
Sahal Sajjad

Reputation: 235

Solved the issue. This has been a bug in code.Django under ticket #23454 https://code.djangoproject.com/ticket/23454

But this bug has been closed due to insufficient information.

I created a new app and replaced the files with the older one and makemigrations as well as migrate ran successfully.

I think this issue arises if we try to change the Django Auth system after first migrate.

Thanks

Upvotes: 2

cafebabe1991
cafebabe1991

Reputation: 5186

What this means ?

Your function get_prep_value is returning this

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

But it should be of type int or string(only if its a valid integer enclosed in double quotes like "1" else an exception would be raised)

Since you have not shared that function, i would suggest the following things

  1. Check what you are passing into the value.
  2. Use type (value) before your return statement so you know what you are having inside the value variable.

Read here about the int() which might be confusing you here

python int( ) function

Upvotes: 0

Related Questions