Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django admin display field from related model

I would like to display the ip_address from Hosts model in HostInfo's admin display.

# models.py
class Hosts(models.Model):
  host_name = models.CharField(max_length=200, unique=True)
  ip_address = models.GenericIPAddressField(protocol='both', unpack_ipv4=True)
  def __unicode__(self):
    return unicode(self.host_name)
  def hostip(self):
    return unicode(self.ip_address)

and I have the below in admin.py

# admin.py
class HostInfoResource(resources.ModelResource):

    host = fields.Field(column_name='host',
                              attribute='host',
                              widget=ForeignKeyWidget(Hosts, 'host_name'))
    project = fields.Field(column_name='project',
                                attribute='project',
                                widget=ForeignKeyWidget(Project, 'project_name'))
    env = fields.Field(column_name='env',
                            attribute='env',
                            widget=ForeignKeyWidget(Env, 'env_name'))

    class Meta:
        model = HostInfo
        skip_unchanged = True
        import_id_fields = ('id', 'host','ticket','deployed_by')
        export_order = ('id', 'host', 'nexpose_level','cpus','memory','os',
                        'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name',
                        'vcenter_status','ticket','env','project','deployed_by',
                        'updated_on','created_on')

class HostInfoAdmin(ImportExportModelAdmin):
    resource_class = HostInfoResource
    list_display = ['id', 'host', 'nexpose_level','cpus','memory','os',
                        'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name',
                        'vcenter_status','ticket','env','project','deployed_by']

    readonly_fields = ('updated_on','created_on',)

admin.site.register(HostInfo, HostInfoAdmin)

I'm not quite understanding what I need to achieve this end.

like image 525
Simply Seth Avatar asked Feb 10 '17 18:02

Simply Seth


1 Answers

try using double underscore when you want to go nested in relationship.

class HostInfoAdmin(ImportExportModelAdmin):
    resource_class = HostInfoResource
    list_display = ['id','host__ip_address', 'host', 'nexpose_level','cpus','memory','os',
                        'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name',
                        'vcenter_status','ticket','env','project','deployed_by'] 

    def host__ip_address(self, obj):
        return obj.host.ip_address
like image 107
Darshan Avatar answered Nov 15 '22 05:11

Darshan