view queryset object in admin view

32 views
Skip to first unread message

makayabou

unread,
Apr 13, 2015, 12:20:02 AM4/13/15
to django...@googlegroups.com
# Je voudrais, dans ma vue admin, avoir un affichage clair des maintenances
# effectuées, qui corresponde à __unicode__ définie dans Ordi
# mais j'ai :  
In admin view, I would like to get a clear list of results,
as defined in __unicode__ from class User.
Instead, I get:

<bound method User.__unicode__ of <User:  Jean Dubois>>

I just need Jean Dubois..

Here's the code:

#In models.py:


class PC(models.Model):
 
def users(self):
 pc
= self.user_set.all()
 
for o in pc:
 
return o.__unicode__
         
def __unicode__(self):
                 
return 'pc '+unicode(self.id)+' - '+self.os()




class User(models.Model):
    mypc
= models.ForeignKey(PC)
   
def __unicode__(self):
       
return self.name      


#In admin.py:


class PcAdmin(admin.ModelAdmin):
    list_display
= ('users','id')


makayabou

unread,
Apr 13, 2015, 12:21:50 AM4/13/15
to django...@googlegroups.com
Hello,

Sorry for the previous send unattended...

I have problems trying to print values of a QUerySet Object in Admin View.

In admin view, I would like to get a clear list of results,
as defined in __unicode__ from class User.
Instead, I get:

<bound method User.__unicode__ of <User:  Jean Dubois>>

I just need Jean Dubois..

Here's the code:

#In models.py:


class PC(models.Model):
 
def users(self):
 pc
= self.user_set.all()
 
for o in pc:
 
return o.__unicode__
         
def __unicode__(self):
                 
return 'pc '+unicode(self.id)+' - '+self.os()




class User(models.Model):
    mypc
= models.ForeignKey(PC)
   
def __unicode__(self):
       
return self.name      


#In admin.py:


class PcAdmin(admin.ModelAdmin):
    list_display
= ('users','id')


Thanks for your help. 

Avraham Serour

unread,
Apr 13, 2015, 5:57:00 AM4/13/15
to django...@googlegroups.com

Well, your class User doesn't have an attribute name you are using on the method __unicode__, you should define and set the attribute name with something like a textfield

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/61ec8171-77c5-4bba-9274-8f209422d15e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

makayabou

unread,
Apr 13, 2015, 11:12:55 AM4/13/15
to django...@googlegroups.com
Hello,
thanks for reply,
of course attribute name was defined, I just ommited to past it!

Here's code:

[code]
#In models.py:


class PC(models.Model):
    def users(self):
        pc = self.user_set.all()
        for o in pc:
            
return o.__unicode__
   
def __unicode__(self):
        
return 'pc '+unicode(self.id)+' - '+self.os()


class User(models.Model):
    name=models.TextField()
    mypc 
= models.ForeignKey(PC)

    
def __unicode__(self):
        
return self.name       


#In admin.py:


class PcAdmin(admin.ModelAdmin):
    list_display 
= ('users','id')
[/code]

Still have this weird print: 
<bound method User.__unicode__ of <User:  Jean Dubois>>

instead of:
Jean Dubois

thank you for help

Jani Tiainen

unread,
Apr 13, 2015, 11:23:39 AM4/13/15
to django...@googlegroups.com
Hi, there are several flaws in your code.


On Mon, 13 Apr 2015 04:12:55 -0700 (PDT)
makayabou <maka...@gmail.com> wrote:

> Hello,
> thanks for reply,
> of course attribute name was defined, I just ommited to past it!
>
> Here's code:
>
> [code]
> #In models.py:
>
>
> class PC(models.Model):
> def users(self):
> pc = self.user_set.all()
> for o in pc:
> return o.__unicode__

Here you return first (only first) __unicode__ method of "o" object.
Wild guess is that you want to do something like this:

def users(self):
return u', '.join([unicode(u) for u in self.user_set.all()]) ## Return comma separated list of users

> def __unicode__(self):
> return 'pc '+unicode(self.id)+' - '+self.os()

You declare unicode method, yet your return is a bytestring. You should put u-prefix before texts.

>
> class User(models.Model):
> name=models.TextField()
> mypc = models.ForeignKey(PC)
> def __unicode__(self):
> return self.name
>
>
> #In admin.py:
>
>
> class PcAdmin(admin.ModelAdmin):
> list_display = ('users','id')
> [/code]
>
> Still have this weird print:
> <bound method User.__unicode__ of <User: Jean Dubois>>
>

That's correct output - first object and it's __unicode__ method - that's what you return in your code.

> instead of:
> Jean Dubois
>
> thank you for help
>
> Le lundi 13 avril 2015 07:57:00 UTC+2, Avraham Serour a écrit :
> >
> > Well, your class User doesn't have an attribute name you are using on the
> > method __unicode__, you should define and set the attribute name with
> > something like a textfield
> > On Apr 13, 2015 3:21 AM, "makayabou" <maka...@gmail.com <javascript:>>
> >> email to django-users...@googlegroups.com <javascript:>.
> >> To post to this group, send email to django...@googlegroups.com
> >> <javascript:>.
> >> <https://groups.google.com/d/msgid/django-users/61ec8171-77c5-4bba-9274-8f209422d15e%40googlegroups.com?utm_medium=email&utm_source=footer>
> >> .
> >> For more options, visit https://groups.google.com/d/optout.
> >>
> >
>
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
> To post to this group, send email to django...@googlegroups.com.
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/58ba4264-a9b1-4a7e-a86c-cc9d145deaab%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.


--
Jani Tiainen

makayabou

unread,
Apr 13, 2015, 12:29:36 PM4/13/15
to django...@googlegroups.com
I made a clearer and full sample code.
When I use the code as is, I get results in a poor readable
format in PCAdmin view
although I just want Jean Dubois, martin franck

Thanks for help

My models.py
[code]
from django.db import models

class PC(models.Model):
os= models.CharField(max_length=5, null=True, blank=True)
def users(self):
pc = self.user_set.all()
return pc
# If I use loop "for", I get a great unicode view, but only the first result...
# for o in pc:
# return o.__unicode__()
def __unicode__(self):
return 'pc  '+ unicode(self.id)+ ' - ' + self.os

class User(models.Model):
    name=models.CharField(max_length=20, null=True, blank=True)
    mypc = models.ForeignKey(PC, null=True,blank=True)
    def __unicode__(self):
        return self.name
[/code]

My admin.py:
[code]
from django.contrib import admin
from users.models import User, PC

class PCAdmin(admin.ModelAdmin):
    list_display = ('users','id')
    
class UserAdmin(admin.ModelAdmin):  
list_display = ('name','mypc')
admin.site.register(User, UserAdmin)
admin.site.register(PC, PCAdmin)
/]

makayabou

unread,
Apr 13, 2015, 12:35:07 PM4/13/15
to django...@googlegroups.com
Thank you Jani,
it solved it!
I was just loosing around, I finally got it...
thanks all
Reply all
Reply to author
Forward
0 new messages