From d3d5bcb27ca99f835c101eff1eef432a64de1ba1 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Fri, 13 Jan 2012 01:23:43 +0100 Subject: [PATCH] Adds field search to admin models - Search hosts by hostname, MAC adress or IP adress. - Search domains by domain name. - Lists MAC adress and IP address in list of hosts. --- mdb/admin.py | 4 +++- mdb/models.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/mdb/admin.py b/mdb/admin.py index d2e2a24..8e4d856 100644 --- a/mdb/admin.py +++ b/mdb/admin.py @@ -12,9 +12,10 @@ class InterfaceInline(admin.TabularInline): class HostAdmin(admin.ModelAdmin): inlines = [InterfaceInline] - list_display = ['hostname', 'brand', 'owner', 'host_type', 'location', 'serial_number', 'in_domain', 'created_date', 'ipv6_enabled'] + list_display = ['hostname', 'brand', 'owner', 'host_type', 'location', 'mac_addresses', 'ip_addresses', 'in_domain', 'ipv6_enabled', 'created_date'] readonly_fields = ['kerberos_principal_name', 'kerberos_principal_created_date', 'kerberos_principal_created'] + search_fields = ['hostname', 'location', 'interface__macaddr','interface__ip4address__address'] fieldsets = ( ('Owner Information', { 'fields' : ( 'owner', 'location', 'description' ) @@ -63,6 +64,7 @@ class DomainCnameRecordInline(admin.TabularInline): class DomainAdmin(admin.ModelAdmin): inlines = [DomainSrvRecordInline, DomainTxtRecordInline, DomainCnameRecordInline] list_display = ['domain_name', 'domain_soa', 'domain_admin', 'num_records', 'domain_ipaddr'] + search_fields = ['domain_name'] class HostTypeAdmin(admin.ModelAdmin): diff --git a/mdb/models.py b/mdb/models.py index d4f429c..d819a55 100644 --- a/mdb/models.py +++ b/mdb/models.py @@ -444,6 +444,22 @@ class Host(models.Model): return True return False + ipv6_enabled.boolean = True + + def mac_addresses(self): + addresses = [] + for interface in self.interface_set.all(): + if interface.macaddr == None: continue + addresses.append( interface.macaddr) + return ",".join(addresses) + + def ip_addresses(self): + addresses = [] + for interface in self.interface_set.all(): + if interface.ip4address == None: continue + addresses.append( interface.ip4address.address ) + return ",".join(addresses) + def get_ip_addresses(self): addresses = [] for interface in self.interface_set.all():