Я должен добавить, что одна большая проблема, которая может возникнуть у корпоративных приложений при использовании Django ORM, заключается в том, что он несколько ограничен в своих возможностях (то есть, какие запросы он может выражать).Я думаю, что это выполнимо, если вы делаете две вещи:
- Стремитесь максимально выражать запросы в Django ORM (без опыта может быть слишком легко отклонить запрос, поскольку это невозможно в Django).
- Если запрос действительно невозможен в Django (вы также можете задать IRC #django канал или группу django-users, если вы действительно не уверены), сохраните запрос в файле query.py, который ваш dbaможно управлять или смотреть.(Это может быть плоский словарь, на который ссылается файл вашей модели.)
В качестве примера для пункта 2: Нет причины, по которой вы не можете написать диспетчер хранилища запросов, который используется следующим образом:у вас было приложение под названием блоги с моделью Entry:
# models.py
class Entry(models.Model):
objects = project.QueryStorageManager()
author = models.ForeignKey(User)
body = models.TextField()
slug = models.CharField(max_length=512)
published_date = models.DateField()
@project.StoredQuery("getEntryMonthHistogram")
def getEntryMonthHistogram(self, sql, author):
return objects.runQuery(sql, author)
# queries.py
{
"getEntryMonthHistogram": """SELECT EXTRACT(MONTH FROM published_date),
REPEAT('*', count(*)) histogram
FROM blogs_entry
WHERE author_id = %s""",
}