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 ;)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With