diff --git a/conntrackt/models.py b/conntrackt/models.py --- a/conntrackt/models.py +++ b/conntrackt/models.py @@ -1,5 +1,6 @@ # Django imports. from django.core.exceptions import ValidationError +from django.core.urlresolvers import reverse from django.db import models @@ -15,7 +16,7 @@ class Project(models.Model): description - Free-form description of the project. """ - name = models.CharField(max_length=100) + name = models.CharField(max_length=100, unique=True) description = models.TextField(blank=True) class Meta: @@ -29,6 +30,13 @@ class Project(models.Model): return self.name + def get_absolute_url(self): + """ + Return absolute URL for viewing a single project. + """ + + return reverse("project", kwargs={'pk': self.pk}) + class Location(models.Model): """ @@ -54,7 +62,7 @@ class Location(models.Model): description - Free-form description of a location. """ - name = models.CharField(max_length=100) + name = models.CharField(max_length=100, unique=True) description = models.TextField(blank=True) def __unicode__(self): @@ -92,15 +100,11 @@ class Entity(models.Model): location = models.ForeignKey(Location) class Meta: - """ - Overrides some of the default parameters used by Django for this model. + # Fix the plural form used by Django. + verbose_name_plural = 'entities' + # Enforce uniqueness of entity name in a project. + unique_together = ("name", "project") - Properties: - verbose_name_plural - Changes the way Django Admin displays the model - name in plural. - """ - - verbose_name_plural = 'entities' def __unicode__(self): """ @@ -139,6 +143,13 @@ class Entity(models.Model): return communications + def get_absolute_url(self): + """ + Return absolute URL for viewing a single entity. + """ + + return reverse("entity", kwargs={'pk': self.pk}) + class Interface(models.Model): """ @@ -166,6 +177,10 @@ class Interface(models.Model): address = models.IPAddressField() netmask = models.IPAddressField(default='255.255.255.255') + class Meta: + # Enforce uniqueness of interface name in an entity. + unique_together = ("name", "entity") + def __unicode__(self): """ Returns: @@ -225,7 +240,7 @@ class Communication(models.Model): description = models.TextField(blank=True) class Meta: - # Enfoce uniqueness of communication. + # Enforce uniqueness of communication. unique_together = ("source", "destination", "protocol", "port") def __unicode__(self):