Показать поле многие ко многим в панели администратора django

Я использую эту функцию (cedi), но она не работает. Я хочу показать поле nombre модели Cedi в панели администратора модели Campania. Название колонки появляется, но информация или каждый экземпляр не появляется.

@admin.register(Campania)
class CampaniaAdmin(ImportExportMixin, admin.ModelAdmin):   

    # conecta con CampaniaResource
    resource_class = CampaniaResource 
    list_display = ('nombre', 'descripcion', 'cedi')
    list_filter = ('nombre', )
    readonly_fields = ('fecha_creacion', 'fecha_modificacion')
    search_fields = ['nombre',] 

    def cedi(self, obj):
        return ", ".join([i.nombre for i in obj.cedis.all()])

модели

class Campania(models.Model):
    nombre = models.CharField(verbose_name='campaña', max_length=200, primary_key=True)
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    fecha_modificacion = models.DateTimeField(auto_now=True)
    descripcion = models.TextField()
    # campo manytomany
    cedis = models.ManyToManyField(Cedi)

    def __str__(self):
        return self.nombre 


class Cedi(models.Model):
    nombre = models.CharField(max_length=200, primary_key=True)
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    fecha_modificacion = models.DateTimeField(auto_now=True)
    # campo ForeignKey
    pais = models.ForeignKey(Pais, on_delete=models.CASCADE)

    def __str__(self):
        return self.nombre

Я сделал то же самое, используя ваш код, и получил такой результат: показывается поле M2M в админке django

Вот как выглядит код с моей стороны:

models.py

 class Pais(models.Model):
    name = models.CharField(max_length=200, primary_key=True)
    
class Cedi(models.Model):
    nombre = models.CharField(max_length=200, primary_key=True)
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    fecha_modificacion = models.DateTimeField(auto_now=True)
    # campo ForeignKey
    pais = models.ForeignKey(Pais, on_delete=models.CASCADE)

    def __str__(self):
        return self.nombre

class Campania(models.Model):
    nombre = models.CharField(verbose_name='campaña', max_length=200, primary_key=True)
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    fecha_modificacion = models.DateTimeField(auto_now=True)
    descripcion = models.TextField()
    # campo manytomany
    cedis = models.ManyToManyField(Cedi)

    def __str__(self):
        return self.nombre 

admin.py

class PaisAdmin(admin.ModelAdmin):
    list_display  = [f.name for f in Pais._meta.fields]
admin.site.register(Pais, PaisAdmin)

class CediAdmin(admin.ModelAdmin):
    list_display  = [f.name for f in Cedi._meta.fields]
admin.site.register(Cedi, CediAdmin)

@admin.register(Campania)
class CampaniaAdmin(ImportExportMixin, admin.ModelAdmin):   

    # conecta con CampaniaResource
    resource_class = Campania
    list_display = ('nombre', 'descripcion', 'cedi')
    list_filter = ('nombre', )
    readonly_fields = ('fecha_creacion', 'fecha_modificacion')
    search_fields = ['nombre',] 

    def cedi(self, obj):
        return ", ".join([i.nombre for i in obj.cedis.all()])
Вернуться на верх