Changeset 6403
- Timestamp:
- Dec 4, 2008, 1:09:24 AM (16 years ago)
- Location:
- branches/exodus-roland/exodus
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/exodus-roland/exodus/admin.py
r6398 r6403 3 3 from django import forms 4 4 from exodus.models import * 5 from exodus.forms import NodeForm 5 6 6 from exodus.wllogic import free_masterip, newSSIDName, addInterlinkIP, \ 7 freeInterlinkIP, freePublicAPIP 8 9 from exodus.contrib import ReadOnlyAdminFields 10 11 class InterfaceCommon(ReadOnlyAdminFields): 12 readonly = ('ip', ) 13 def save_model(self, request, obj, form, change): 14 if obj.link and (obj.type != obj.link.type): 15 raise ValueError,'Type of local and remote interface needs to match' 16 if str(obj.type) != "eth": 17 obj.ssid = newSSIDName(obj.node, obj.iface, 'unused') 18 obj.channel = '1' 19 obj.mode = 1 # set to master 20 21 # Only change IP if changes in interface link/mask or new of course :-) 22 #if change or self.is_changed.has_key('link') or \ 23 # self.is_changed.has_key('netmask'): 24 if not obj.link: 25 obj.ip = freeInterlinkIP(obj) 26 else: 27 obj.ip = addInterlinkIP(obj.link) 28 29 # XXX: Change in netmask requires full range of netmask changes \ 30 # on slaves 31 obj.save() 32 #Dirty to hack to get reference to self working 33 if not obj.link: 34 obj.link = obj 35 obj.save() 7 class InterfaceInline(admin.TabularInline): 8 model = Interface 9 extra = 1 10 fieldsets = ( 11 (None, { 12 'classes': ('collapse',), 13 'fields': ('type', 'iface', 'polar', 'antenna', 'link') 14 }), 15 ) 36 16 37 17 38 class PublicAPInline(ReadOnlyAdminFields,admin.TabularInline): 39 model = PublicAP 40 extra = 1 18 class NodeAdmin(admin.ModelAdmin): 19 form = NodeForm 20 list_display = ('name', 'location','network') 21 search_fields = ['name'] 22 list_filter = ('network',) 23 fieldsets = ( 24 (None, { 25 'fields' : (('name', 'status') , 'location', 'network', 'masterip') 26 }), 27 ) 41 28 42 class InterfaceAdmin(InterfaceCommon, admin.ModelAdmin): 43 inlines = (PublicAPInline,) 44 pass 45 46 class InterfaceInline(InterfaceCommon, admin.TabularInline): 47 model = Interface 48 extra = 1 49 50 class DhcpStaticInline(admin.TabularInline): 51 model = DhcpStatic 52 extra = 1 53 54 class PublicAPAdmin(ReadOnlyAdminFields,admin.ModelAdmin): 55 inlines = (DhcpStaticInline,) 56 57 class NodeAdmin(admin.ModelAdmin): 58 exclude = ('masterip',) 59 # Inline forms sucks bigtime, editing deleting, making readonly broken or non existing 60 # XXX: Every save creates a new interface :-( 61 inlines = (InterfaceInline,) 62 63 def save_model(self, request, obj, form, change): 64 #XXX: Testing hidden field commits 65 obj.masterip = free_masterip(obj.network) 66 obj.save() 29 class LocationAdmin(admin.ModelAdmin): 30 search_fields = ['description'] 67 31 68 32 admin.site.register(Antenna) 69 admin.site.register(Location )33 admin.site.register(Location, LocationAdmin) 70 34 admin.site.register(DnsServer) 71 35 admin.site.register(Network) 72 admin.site.register(Node, NodeAdmin)73 admin.site.register(Interface ,InterfaceAdmin)74 admin.site.register(PublicAP , PublicAPAdmin)36 admin.site.register(Node, NodeAdmin) 37 admin.site.register(Interface) 38 admin.site.register(PublicAP) 75 39 admin.site.register(DhcpStatic) 76 40 -
branches/exodus-roland/exodus/models.py
r6398 r6403 3 3 from django.db import models 4 4 from django.contrib import admin 5 from django import forms 5 6 6 7 # Create your models here. … … 30 31 ) 31 32 32 class ExtendedModel(models.Model): 33 class Meta: 34 abstract = True 35 verbose_name = 'ExtendedModel' 36 37 def as_list(self): 38 meta = self._meta 39 values = [(f.verbose_name, getattr(self, f.attname)) \ 40 for f in meta.local_fields if f.verbose_name not in ( 'ID')] 41 return values 42 43 class Antenna(ExtendedModel): 33 class Antenna(models.Model): 44 34 type = models.CharField(max_length=20, unique=True) 45 35 gain = models.IntegerField(max_length=3) … … 51 41 return self.type 52 42 53 class Location( ExtendedModel):43 class Location(models.Model): 54 44 description = models.CharField(max_length=200, unique=True) 55 45 longitude = models.DecimalField(max_digits=8,decimal_places=6) … … 64 54 65 55 #XXX: Name Domain perhaps? 66 class DnsServer( ExtendedModel):56 class DnsServer(models.Model): 67 57 ipaddress = models.IPAddressField() 68 58 domainname = models.CharField(max_length=50, unique=True) … … 75 65 76 66 77 class Network( ExtendedModel):67 class Network(models.Model): 78 68 name = models.CharField(max_length=50, unique=True) 79 69 ipspacestart = models.IPAddressField() … … 86 76 return self.name 87 77 88 89 90 91 class Node(ExtendedModel): 78 class Node(models.Model): 92 79 name = models.CharField(max_length=30, unique=True) 93 80 location = models.ForeignKey(Location) … … 103 90 return self.name 104 91 105 class Interface(ExtendedModel): 92 93 class Interface(models.Model): 106 94 node = models.ForeignKey(Node) 107 95 type = models.CharField(max_length=10, choices=INTERFACE_TYPE_CHOICES, \ … … 127 115 return "%s/%s" % (self.node, self.iface) 128 116 129 class InterfaceAlias( ExtendedModel):117 class InterfaceAlias(models.Model): 130 118 iface = models.ForeignKey(Interface,related_name='child') 131 119 ip = models.IPAddressField(unique=True) … … 144 132 # be defined, all other could be calculated on the fly if needed 145 133 146 class PublicAP( ExtendedModel):134 class PublicAP(models.Model): 147 135 iface = models.ForeignKey(Interface,related_name='ap', verbose_name="interface") 148 136 ip = models.IPAddressField(unique=True) … … 159 147 return "%s:%s" % (self.iface,self.pk) 160 148 161 class DhcpStatic( ExtendedModel):149 class DhcpStatic(models.Model): 162 150 hostname = models.CharField(max_length=10,unique=True) 163 151 macaddress = models.CharField(max_length=17)
Note:
See TracChangeset
for help on using the changeset viewer.