Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django queryset returns "classname object" instead of DB values

I have a problem with django queryset.

models:

class Rooms(models.Model,):
room_state = models.CharField(max_length=255, choices=[('emptyReady', 'empty'), ('emptyWaiting4Clean', 'clean ready'), ('busy', 'busy')])
room_type = models.IntegerField()
room_number = models.IntegerField()

and I ty to check working of queryset by typing in python shell:

for d in Rooms.objects.filter(room_state="emptyReady", id='1'):    print(d)

In my DB there is table Rooms_rooms, and inside there is column room_state, and if we make query on DB :

SELECT room_state FROM Rooms_rooms where id = 1

return value is emptyReady

But when I using queryset (like example above) I alwas get: Rooms object

What I did wrong? I try to search answer in all WEB for a 3 hours, and my patience is now over so I count on You all ;)

like image 803
wmarchewka Avatar asked Nov 28 '25 10:11

wmarchewka


1 Answers

Here:

Rooms.objects.filter(room_state="emptyReady", id='1')

returns a queryset of Room objects.

Now, if you want a specific value:

Rooms.objects.filter(room_state="emptyReady", id='1').values_list('room_state', flat=True)

Read more on values_list here

Alternatively:

for d in Rooms.objects.filter(room_state="emptyReady", id='1'):    print(d.room_state)

Another way is to specify a __unicode__ attribute on class Room

class Rooms(models.Model,):
    room_state = models.CharField(max_length=255, choices=[('emptyReady', 'empty'), ('emptyWaiting4Clean', 'clean ready'), ('busy', 'busy')])
    room_type = models.IntegerField()
    room_number = models.IntegerField()

    def __unicode__(self):
        return u'%s' % self.room_state

This should prin room_state value if print d is called

like image 148
karthikr Avatar answered Nov 30 '25 22:11

karthikr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!