2010-12-30 32 views
8

Empecé a utilizar django framework hace unos días y necesito ayuda desesperadamente con mi aplicación.django mostrar el contenido de manytomanyfield

Consiste en clases de pago de cliente, proyecto, administración y administración, donde admin_payment contiene los identificadores de los administradores y proyectos, entre otras cosas.

Mi pregunta es cómo puedo mostrar el "nombre del administrador" de cada "proyecto" en mi lista de proyectos de administración. la propia clase de proyectos no se sostiene los ID de administrador (la Admin_Payment hace)

Actualmente tengo la siguiente estructura: (a rayas abajo)

models.py

class Admin(models.Model): 
    admin_name = models.CharField(unique = True, blank = False, null = False, max_length = 128, verbose_name = u'admin full name') 

    def __unicode__(self): 
     return self.admin_name 
    class Meta: 
     ordering = ('id',) 
     verbose_name = u'Admin Info' 

class Project(models.Model): 
    client = models.ForeignKey(Client, verbose_name = u'Client') 
    description = models.ForeignKey(Description, verbose_name = u'project description') 
    admins = models.ManyToManyField(Admin, verbose_name = u'Administrators', through = 'Admin_Payment') 

class Admin_Payment(models.Model): 
    admin = models.ForeignKey(Admin, verbose_name = u'Administrator') 
    project = models.ForeignKey(Project, verbose_name = u'project') 

admin.py (a Rayas)

class AdminInline(admin.TabularInline): 
    model = Admin 

class ProjectAdmin(admin.ModelAdmin): 
    radio_fields = {'position': admin.HORIZONTAL, 'solution': admin.HORIZONTAL} 
    inlines = [AdminInline, ] 
    list_display = ['client','description','admin_name'] 

clientes y descripciones aparecen correctamente en el proyecto de lista, pero los nombres de administrador no son

cualquier ayuda se agradece (lo siento si he publicado nada de lo que no tiene sentido, soy un novato en Python y Django)

Respuesta

28

Viendo el contenido del campo ManyToMany no se admite de forma predeterminada por Django, porque la base de datos se consultará para cada fila de los resultados. Se puede visualizar usted mismo por adding a method to your Project-model:

class Project(models.Model): 
    .... 
    def admin_names(self): 
     return ', '.join([a.admin_name for a in self.admins.all()]) 
    admin_names.short_description = "Admin Names" 

y poner admin_names en sus campos list_display!

+0

Eso funcionó muy bien, gracias. ¿Alguna idea de cómo puedo agregar un filtro para cada administrador? – Thordin9

+0

lo descubrió. Gracias otra vez – Thordin9

+0

¿es posible agregar un verbose_name al valor devuelto? – Thordin9

Cuestiones relacionadas