Reputation: 217
I am trying to retrieve data from db in django. I want to display it in a table. I am getting an error as:\
coercing to Unicode: need string or buffer, TransType found
There are two models in my Models.py file:
class TransType(models.Model):
name = models.TextField()
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
def __unicode__(self):
return self.name
class Trans(models.Model):
transtype = models.ForeignKey(TransType)
script = models.CharField(max_length=200)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
class Meta:
unique_together = (("transtype", "script"),)
def __unicode__(self):
return self.transtype`
My views.py file
def updatetrans(request):
json_data=open('/home/ttt/Ali/a.json').read()
data = json.loads(json_data)
for pk, pv in data.iteritems():
for k,v in pv.iteritems():
try:
trans_type = TransType.objects.get_or_create(name=k)
trans = Trans()
trans.transtype_id = trans_type[0].id
if isinstance(pv[k], basestring):
script = pv[k]
else:
print "****** List ****"
script = pv[k][1]
trans.script = script
trans.save()
print " Inserted ==>", script
except Exception, e:
print e
#print "Not inserted ==>", pv[k][1]
pass
#return HttpResponse("Done")
info = TransType.objects.all()
info2 = Trans.objects.all()
bookdata = { "details" : info, "details" : info2 }
print bookdata
return render_to_response("account/updatetrans.html", bookdata, context_instance=Context(request))
My url.py file
url(r'^updatetrans/$', 'booki.account.views.updatetrans', name='updatetrans'),
My updatetrans.html file
{% load i18n %}
<!doctype html>
<html>
<body>
<button type="button" onclick="alert('Hello world!')">Click Me!</button>
<table border="1" style="width:800px">
<tr><td>
{% for s in details %}
{{ s.script }}
{% endfor %}
</td>
<td>
{% for n in detail %}
{{ n.name }}
{% endfor %}
</td>
</tr>
</table>
</body>
</html>
Plz help....
Traceback
Environment: Request Method: GET
enter code here
Django Version: 1.3
Python Version: 2.7.3
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.messages',
'south',
'booki.editor',
'booki.account',
'booki.reader',
'booki.portal',
'booki.messaging',
'sputnik',
'booktypecontrol']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/home/ttt/abc_booktype/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/ttt/abc_booktype/Booktype/lib/booki/account/views.py" in updatetrans 808.print bookdata
File "/home/ttt/abc_booktype/local/lib/python2.7/site-packages/django/db/models/query.py" in __repr__72. return repr(data)
File "/home/ttt/abc_booktype/local/lib/python2.7/site-packages/django/db/models/base.py" in __repr__370. u = unicode(self)
Exception Type: TypeError at /accounts/updatetrans/
Exception Value: coercing to Unicode: need string or buffer, TransType found
Upvotes: 3
Views: 45428
Reputation: 217
I got the answer. It is working fine now.
Views.py:
def displaytrans(request):
TransType.objects.all()
info = TransType.objects.all()
info2 = Trans.objects.all()
print info
bookdata = { "detail" : info, "details" : info2 }
print bookdata
resp = render_to_response("account/displaytrans.html", bookdata, context_instance=Context(request))
return resp
displaytrans.html:
<!doctype html>
<html>
<body>
<table border="1" style="width:800px">
<tr>
<td> {% for s in details %} </td>
<td> {{ s.script }} </td>
</tr>
<tr>
<td> {{ s.transtype_id}} </td>
{% endfor %}
</tr>
</table>
</body>
</html>
url.py:
url(r'^displaytrans/$', 'booki.account.views.displaytrans', name='displaytrans'),
Upvotes: 4
Reputation: 599956
The traceback shows that the error is coming in your Trans model's __unicode__
method. As the error says, you need to actually return unicode from that method, but you are returning the related TransType.
You could fix this by explicitly converting to unicode in that method:
return unicode(self.transtype)
but you should probably pick a better string representation of your data: there are going to be many Trans objects with the same TransType, so your unicode should distinguish between them, perhaps by also showing the script field.
Upvotes: 0