2017-07-26 2 views
0

Ich baue App in Django und ich habe diese App auf HEROKU eingesetzt. Mein Fehler ist, dass ich "Name" als Fremdschlüssel in meinem Modell habe, wenn ich auf Name auf meiner APP zugreife, die auf heroku Name bereitgestellt wird, wird als "BENUTZER-OBJEKT" gezeigt.erhalten Name als USER OBJECT

Ich kann auf den richtigen Namen zugreifen, während auf dem lokalen Server ausgeführt wird.

Ich habe viele verschiedene Möglichkeiten versucht, aber immer noch nicht in der Lage, es zu beheben.

Bilder zum besseren Verständnis meines Fehlers.

pictures for better understanding of my error

+0

Ich denke, es ist ein Python-Versionskonflikt. Was ist Ihre lokale Python-Version und Heroku Python-Version? –

+0

@AamirAdnan Ich benutze Python 2.7 auf meinem System (lokal) und Heroku verwendet python-3.6.1 –

+0

Ob dies die Quelle Ihres Problems ist, scheint eine gute Idee zu sein, Python 2 auf dem Server zu verwenden, wenn Sie Verwenden Sie Python 2 für dev: https://devcenter.heroku.com/articles/python-runtimes –

Antwort

0

Das Problem in Upload.__unicode__ Methode. Auf Local haben Sie Python2.7 daher tun unicode(self.name) gibt die entsprechende Darstellung des Objekts zurück. Während auf Heroku Sie Python3.6.1 haben, die erwartet, dass Sie __str__ daher bieten Sie __str__ als auch für die Kompatibilität implementieren müssen:

class Upload(models.Modal): 
    # other fields 

    def __unicode__(self): 
     retrun unicode(self.name) 

    def __str__(self): 
     return self.__unicode__().encode('utf-8') 

Oder verwenden Sie einfach python_2_unicode_compatible und implementieren nur __str__:

from django.utils.encoding import python_2_unicode_compatible 


@python_2_unicode_compatible 
class Upload(models.Modal): 
    # other fields 

    def __str__(self): 
     retrun str(self.name) 

sonst in Vorlage kann einfach {{ i.name.username }} tun, um den Benutzernamen zu erhalten.

+0

ja danke für Hilfe. –

+0

Kein Problem, ich habe einen einfacheren Ansatz mit 'python_2_unicode_compatible' Dekorator hinzugefügt. –

+1

Noch besser, verwenden Sie die gleiche Version von Python zwischen Entwicklung und Produktion. –

0

Zum Beispiel

Class User(models.Model): 
    @property 
    def get_fullname(self): 
     return self.first_name + ' ' + self.last_name 

in der Vorlage {{i.name.get_fullname}}