Search code examples
djangodjango-admin

Display a list of related fields in the admin panel


I have two related models.


class Refbook(models.Model):
    code = models.CharField(max_length=100, unique=True)
    name = models.CharField(max_length=300)
    description = models.TextField()   


class VersionRefbook(models.Model):
    refbook_id = models.ForeignKey('Refbook',
                                   on_delete=models.CASCADE,
                                   related_name='versions')
    version = models.CharField(max_length=50)
    date = models.DateField()

When I edit a Refbook instance in the admin panel, I want the read-only list of available versions of this Refbook instance to be displayed on the same page.

I know that it is possible to output them through TabularInline . And it seems that there is a read-only property here.

Maybe there is a way to display just a list in a column or row separated by commas?

Now, I have this code in admin.py:

@admin.register(Refbook)
class RefbookAdmin(admin.ModelAdmin):
    list_display = ['id', 'code', 'name']

I tried to create a "get_versions(self)" method in models.py in Refbook class, in which I received a queryset using related_name. But I can't display it in the admin panel. Or is it still correct to do this using the model.ModelAdmin parameters?


Solution

  • You can do something like this:

    @admin.register(Refbook)
    class RefbookAdmin(admin.ModelAdmin):
        list_display = ['id', 'code', 'name', 'versions']
    
        def versions(self, obj):
            return ', '.join(obj.versions.values_list('version', flat=True))