user1862399
user1862399

Reputation: 217

To retrieve data from django database and display in table

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

Answers (2)

user1862399
user1862399

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

Daniel Roseman
Daniel Roseman

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

Related Questions