В Django есть два типа пользовательских методов объектов базы данных: методы на основе строк (или экземпляров), методы на основе таблиц.
Методы на основе строк:
Выпросто определите метод в классе модели, как вы это сделали:
class Page(models.Model):
def row_method(self):
return "Row method working on Page object with id " + str(self.id)
Эти методы должны вызываться из одного объекта Page!
Таким образом, вы можете сделать: Page.objects.all()[0].row_method()
, новы НЕ МОЖЕТЕ сделать Pages.objects.all().row_method
, потому что Pages.objects.all()
возвращает массив объектов Page, для которых метод row_method()
не определен.
Эти методы основаны на строках , потому что они действуют в строкеуровень (одна строка в таблице БД и, следовательно, один экземпляр относительного класса модели).
Методы на основе таблицы:
Вы также можете определить методы, связанные сконкретный тип модели, а не конкретный экземпляр с помощью менеджеров.Вы можете найти документацию по Менеджеру здесь: http://docs.djangoproject.com/en/1.2/topics/db/managers/
Этот тип методов доступен при управлении коллекцией объектов Page, например, вы можете написать:
Page.objects.filter(title__startswith='The').calculate_total_title_length()
В этом случаеМетод имеет доступ к коллекции объектов Page, возвращаемых запросом, и, в моем примере, он вычисляет сумму длины всех заголовков всех объектов Page, найденных запросом.