2016-08-15 8 views
0

Der Versuch, mein Projekt auf dem Server zu implementieren, und ich in Migrationen bin stecken becouse es einige Fehler ist:Typeerror: int() Argument muss eine Zeichenkette oder eine Zahl sein, nicht ‚Modell Instanz‘ - 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' 

und hier ist meine models.py Datei:

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 

Ich versuche nur, um etwas frische App auf Heroku zu machen, neue Migrationen machen und olders zu löschen, aber es funktionierte immer noch nicht. Kann jemand wissen, was damit nicht stimmt? Danke für die Antwort.

Antwort

1

Hier ist der Täter:

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

Sie können eine Modellklasse als Foreignkey voreingestellt. Wenn Sie einen hartcodierten Standardwert festlegen möchten, sollten Sie einen int verwenden und sicherstellen, dass der ausgewählte Wert als Schlüssel in Ihrem Profile Modell vorhanden ist.

+0

Danke, es hat funktioniert :) – Damian

+0

@Damian Sie können in Betracht ziehen, wenn es Ihr Problem gelöst hat :) –

Verwandte Themen