2016-08-15 3 views
0

Попытка развернуть свой проект на сервере, и я застрял в миграции becouse есть некоторые ошибки:TypeError: Int() аргумент должен быть строкой или числом, не «Модель Instance» - Heroku

File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 382, in add_field 
definition, params = self.column_sql(model, field, include_default=True) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 145, in column_sql 
default_value = self.effective_default(field) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 210, in effective_default 
default = field.get_db_prep_save(default, self.connection) 
    File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/fields/related.py", line 915, in get_db_prep_save 
return self.target_field.get_db_prep_save(value, connection=connection) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 728, in get_db_prep_save 
prepared=False) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 968, in get_db_prep_value 
value = self.get_prep_value(value) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 976, in get_prep_value 
return int(value) 
TypeError: int() argument must be a string or a number, not 'Profile' 

а вот мой models.py файл:

class Post(models.Model): 
author = models.ForeignKey('auth.User') 
title = models.CharField(max_length=75) 
image = models.ImageField(null=True, blank=True, width_field="width_field", height_field="height_field", upload_to='images') #must be installed Pillow for ImageField 
height_field = models.IntegerField(default=0) 
width_field = models.IntegerField(default=0) 
content = models.TextField() 
updated = models.DateTimeField(default=datetime.now()) 
timestamp = models.DateTimeField(default=datetime.now()) 


def __str__(self): 
    return self.title 

@receiver(pre_delete, sender=Post) 
def post_delete(sender, instance, **kwargs): 
# Pass false so FileField doesn't save the model. 
if instance.image: 
    instance.image.delete(False) 




class Profile(models.Model): 
onlyletters = RegexValidator(r'^[a-zA-Z]*$', 'Only letters are allowed.') 
author = models.ForeignKey('auth.User') 
name = models.CharField(max_length=20, null = True, validators=[onlyletters]) 
surname = models.CharField(max_length=25, null = True, validators=[onlyletters]) 
city = models.CharField(max_length=30, blank=True, validators=[onlyletters]) 
birth_date = models.DateField(blank=True, null=True, help_text="Can not be more than 100 years - (Format yyyy-mm-dd)") 

topic = models.CharField(max_length = 50, null=True) 


def __str__(self): 
    return self.topic 

class Favourite(models.Model): 
name = models.CharField(max_length=50) 
members = models.ManyToManyField(Profile, through='Membership') 

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


class Membership(models.Model): 
author = models.CharField(max_length=50) 
profile = models.ForeignKey(Profile, default=Profile) 
favourite = models.ForeignKey(Favourite) 
created = models.DateTimeField(default=timezone.now) 



class Comment(models.Model): 
post = models.ForeignKey('blogapp.Post', related_name='comments') 
author = models.ForeignKey('auth.User') 
text = models.TextField() 
created_date = models.DateTimeField(default=timezone.now) 

def __str__(self): 
    return self.text 

Просто пытаюсь сделать некоторые свежие приложения на Heroku, делая новые миграции и удаление olders, но она по-прежнему не работает. Кто-нибудь может знать, что с ним не так? Спасибо за ответ.

ответ

1

Вот виновник:

profile = models.ForeignKey(Profile, default=Profile) 
#         ^^^^^^^^^^^^^^^ 

Вы не можете установить класс модели как Foreignkey по умолчанию. Если вы хотите установить жестко закодированный по умолчанию, вы должны использовать int и убедиться, что выбранное значение существует как ключ в вашей модели Profile.

+0

Спасибо, его сработало :) – Damian

+0

@Damian Вы можете подумать о принятии, если он решит вашу проблему :) –

Смежные вопросы