diff --git a/conntrackt/models.py b/conntrackt/models.py --- a/conntrackt/models.py +++ b/conntrackt/models.py @@ -23,6 +23,28 @@ from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse from django.db import models +from django.db.models.query_utils import Q + + +class SearchManager(models.Manager): + """ + Custom model manager that implements search for model instances that contain + a specific string (search term) in fields "name" or "description". + """ + + def search(self, search_term): + """ + Performs a search for model instances that contain the provided search + term in fields "name" or "description". The search is case-insensitive. + + Arguments: + search_term - String to search the name and description for. + + Returns: + Query set with model instances that matched the search. + """ + + return self.filter(Q(name__icontains=search_term) | Q(description__icontains=search_term)) class Project(models.Model): @@ -39,6 +61,7 @@ class Project(models.Model): name = models.CharField(max_length=100, unique=True) description = models.TextField(blank=True) + objects = SearchManager() class Meta: permissions = (("view", "Can view information"),) @@ -119,6 +142,7 @@ class Entity(models.Model): description = models.TextField(blank=True) project = models.ForeignKey(Project) location = models.ForeignKey(Location) + objects = SearchManager() class Meta: # Fix the plural form used by Django.