2010-11-21 13 views
1

In einem Django Projekt versuche ich, die URL zu einer Willeninstanz zu übergeben. Kommentare werden auf einen Wunsch angewendet. Ich habe versucht, diesen Fehler zu verstehen, bin aber ratlos.TypeError, das zu Unicode gezwungen wird: benötigt Schnur oder Puffer

Diese Funktion:

 def comment_email(request, comment, **kwargs): 
     want = get_object_or_404(Want, id=comment.object_pk) 
     url = want.get_absolute_url 
     print url 

Wirft diesen Fehler

Environment: 

Request Method: POST 
Request URL: http://localhost:8000/comments/post/ 
Django Version: 1.2.3 
Python Version: 2.7.0 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.admin', 
'django.contrib.comments', 
'django.contrib.markup', 
'src', 
'lib.tagging', 
'lib.markdown', 
'lib.avatar', 
'ajaxcomments', 
'south'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    100.      response = callback(request, *callback_args, **callback_kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ajaxcomments/utils.py" in wrapped 
    57.   return func(*args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    76.      response = view_func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/views/decorators/http.py" in inner 
    37.    return func(request, *args, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/comments/views/comments.py" in post_comment 
    127.   request = request 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/dispatch/dispatcher.py" in send 
    162.    response = receiver(signal=self, sender=sender, **named) 
File "/Users/emilepetrone/code/apprentice2/src/utils.py" in comment_email 
    24. print url 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/base.py" in __repr__ 
    344.    u = unicode(self) 

Exception Type: TypeError at /comments/post/ 
Exception Value: coercing to Unicode: need string or buffer, Want found 

das wollen Modell ist hier:

 class Want(models.Model): 

     pub_date =   models.DateTimeField(default=datetime.now,auto_now_add=True,db_index=True) 
     body = models.TextField(default='',max_length=1000) 
     body_html = models.TextField(editable=False, blank=True) 

     #Metadata 
     mentee = models.ForeignKey(User) 
     points = models.IntegerField(default=3) 
     enable_comments = models.BooleanField(default=True) 
     featured = models.BooleanField(default=False) 

     #Tags 
     tags = TagField(help_text="Autocomplete") 

     def get_tags(self): 
     return Tag.objects.get_for_object(self)  

     class Meta: 
     ordering = ['-pub_date'] 

     def __unicode__(self): 
     return self 

     def save(self): 
     self.body_html = markdown(self.body) 
     super(Want, self).save() 

     def get_absolute_url(self): 
     return ({ 'object_id': self.id }) 
     get_absolute_url = models.permalink(get_absolute_url) 

Dank für Ihre Hilfe danken!

+0

Sie müssen die vollständige Traceback buchen. –

+0

Daniel, gerade hinzugefügt. Danke – Emile

Antwort

7

Ich denke, das Problem ist,

def __unicode__(self): 
    return self 

, die einen Unicode-String statt einer "Want" Instanz zurückgeben sollte. Ich bin mir nicht sicher, was Sie stattdessen dort wollen - vielleicht "self.id"

+0

Ich dachte an die want.get_absolute_url(), aber kein solches Glück. Mit dem ersten Tipp, "self.id" - meinst du return self.id? – Emile

+0

__unicode __() soll eine Unicode-Zeichenkette zurückgeben, zum Beispiel wäre eine leere Zeichenkette sogar gültig, aber ihre aktuelle Rückgabe "self" ist eine Want-Instanz, keine Unicode-Zeichenkette. Was für eine bestimmte Zeichenfolge - nicht wissen, Ihren Code oder Ziele - Ich bin nur raten, dass "self.id" ist eine gültige Unicode-Zeichenfolge, die Ihren Zwecken entsprechen würde. – mjhm

+0

Ja, ich habe tatsächlich die def __unicode__ entfernt und es funktioniert wie ein Zauber. Vielen Dank – Emile

Verwandte Themen