3 votes

joindre deux tables dans django admin pour obtenir des colonnes pour display_list

J'ai un problème avec list_display/joining two table pour l'interface d'administration de django.

Je veux des colonnes nom_du_programme y est_actif de Programmes scolaires modèle avec nom_du_paramètre, description_du_paramètre de VisVisitParameters dans l'administration de django. Je suis capable d'avoir les colonnes que j'utilise avec return dans chacun de ces modèles. J'ai essayé d'obtenir de l'aide à partir de la page question qui a déjà été posée. Mais je n'ai toujours pas réussi à trouver la réponse.

class SchPrograms(models.Model):
  program_id = models.AutoField(primary_key=True)
  program_name = models.CharField(max_length=200, blank=True, null=True)
  creation_timestamp = models.DateTimeField(blank=True, null=True)
  is_active = models.IntegerField()

  class Meta:
      managed = True
      db_table = 'sch_programs'
      app_label = 'polls'

  def __str__(self):
      return self.program_name

class VisVisitParameters(models.Model):
   vparameter_id = models.AutoField(primary_key=True)
   parameter_name = models.CharField(max_length=300, blank=True, null=True)
   parameter_description = models.TextField(blank=True, null=True)
   is_active = models.IntegerField(choices=STATUS_CHOICES)

   class Meta:
       managed = False
       db_table = 'vis_visit_parameters'

   def __str__(self):
       return str(self.vparameter_id)
       app_label = 'polls'

class VisVisitParameterMappings(models.Model):
    vp_map_id = models.AutoField(primary_key=True)
    vparameter =  models.ForeignKey(VisVisitParameters,on_delete=models.CASCADE)
    program = models.ForeignKey(SchPrograms,on_delete=models.CASCADE)
    display_order = models.IntegerField(blank=True, null=True)
    is_active = models.IntegerField()

    class Meta:
       managed = False
       db_table = 'vis_visit_parameter_mappings'
       app_label = 'polls'

    def __str__(self):
       return str(self.parameter_name)

model.py

class VisVisitParameterMappings_admin(admin.ModelAdmin):
    list_display =   ('program_name','is_active','parameter_name','parameter_description ')

3voto

not2acoder Points 691

Pour afficher les éléments requis sur la page d'affichage de la liste, vous pouvez écrire vos propres méthodes, comme suit aquí .

Par exemple, pour votre champ nommé nom_du_programme vous pouvez avoir :

def program_name(self, obj):
    if obj.program:
        return obj.program.program_name

program_name.short_description = 'Program name'

et pour un autre champ de modèle nommé nom_du_paramètre vous pouvez avoir :

def parameter_name(self, obj):
    if obj.vparameter:
        return obj.vparameter.parameter_name

parameter_name.short_description = 'Parameter Name'

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X