ответ ybo был бы моим первым ответом также. Выражение запроса, эквивалентное из этого:
var query = from a in computeAList()
from b in a.Alist
select b.C;
Ради полноты, другие ответы в этом потоке являются вариациями на ту же тему.
От ybo (тот же самый запрос, выраженный как запись через точку):
var query = listOfA.SelectMany(a => a.Alist, (a, b) => b.C);
От Ray Hayes (включая оператор Where; я переформатировал немного):
var query = listOfA.SelectMany(a => a.AList, (a, b) => b.C)
.Where(c => c.Length > 0);
Спасибо всем, кто прочитал это и ищет способ получше. Я думаю, что модульные тесты - определенно более простой подход.
Итак, согласно документации, вам просто нужно создать файл tests.py параллельно с models.py и поместить туда тесты.
from django.test import TestCase
from perforce.models import P4User, P4Client
class ModelTests(TestCase):
def setUp(self):
self.p4 = P4.P4()
self.p4.connect()
def test_BasicP4(self):
"""
Make sure we are running 2009.1 == 65
"""
self.failUnlessEqual(self.p4.api_level, 65)
def test_P4User_get_or_retrieve(self):
"""
This will simply verify we can get a user and push it into the model
"""
user = self.p4.run(("users"))[0]
dbuser = P4User.objects.get_or_retrieve(user.get('User'))
# Did it get loaded into the db?
self.assertEqual(dbuser[1], True)
# Do it again but hey it already exists..
dbuser = P4User.objects.get_or_retrieve(user.get('User'))
# Did it get loaded into the db?
self.assertEqual(dbuser[1], False)
# Verify one field of the data matches
dbuser = dbuser[0]
self.assertEqual(dbuser.email, user.get("Email"))
Теперь вы можете просто запустить терминал и выполнить тест python manage.py, который запустит тесты, но, опять же, это довольно ограниченный вид и по-прежнему требует, чтобы вы переключались между программами и выходили из них .. Итак, вот как вы это делаете это прямо из Textmate с помощью ⌘R.
Добавьте строку импорта вверху и несколько строк внизу.
from django.test.simple import run_tests
#
# Unit tests from above
#
if __name__ == '__main__':
run_tests(None, verbosity=1, interactive=False)
И теперь ⌘R будет работать непосредственно из TextMate.
Прежде всего, не нужно делать ./ manage.py runserver
, пока ваши модели не будут на месте.
Во-вторых, очистите базу данных / перестройте базу данных должно быть выполнено после исправления кода, и может быть выполнено одним махом с помощью ./ manage.py reset perforce
В-третьих, то, что вы каждый раз вводите в оболочку (импортируйте модели, попробуйте создать объект) вместо этого следует писать в наборе тестов. Затем вы можете выполнить ./ manage.py test perforce
вместо того, чтобы запускать оболочку и вводить ее снова. На самом деле, если вы используете набор тестов, в этом нет необходимости, потому что он каждый раз будет создавать чистый фиктивный БД и разбирать его для вас, когда он будет готов.
В-четвертых, вместо «МОЛИТЕСЬ ..» . ", попробуйте" Посмотреть, как проходят тесты. "
Я считаю более гладким писать модульные тесты чаще и использовать оболочку только тогда, когда что-то выходит из строя, и не ясно, почему, и вы хотите ковыряться, чтобы понять это . Она немного более неэффективна в самом начале, но быстро становится прекрасным способом работы.
Я также стараюсь сконцентрироваться на том, чтобы сделать модель более или менее стабильной и полной (по крайней мере, в том, что касается что повлияет на структуру таблицы), прежде чем я буду работать с представлениями и мне нужно будет запустить сервер. Это имеет тенденцию к предварительной загрузке как можно большего числа сбросов, поэтому вы делаете их, когда это дешево.
Хорошо, я укушу :-) Вот что я использую:
MAMP . Вы получаете полнофункциональный стек Apache + MySQL + PHP + phpMyAdmin для управления слоями Интернета и БД. Он отлично подходит для приложений, выходящих за рамки базового SQLite. Базовая версия бесплатна, но я пошел дальше и выбрал Pro, потому что я очень часто ее использую и хотел поддержать разработчиков. Хороший способ проверить и убедиться, что все работает, - это запустить тестовый сервер Django, затем разверните и протестируйте под MAMP на своем компьютере и, наконец, отправьте его на сайт развертывания. (Вы можете попытаться автоматизировать этот процесс с помощью чего-то вроде Fabric .)
Eclipse + PyDev + Расширения PyDev . После правильной настройки вы получите завершение кода Python, приятную среду разработки и полную отладку. Вы можете настроить его так, чтобы он запускал тестовый сервер Django для вас, и вы могли устанавливать точки останова в любой строке исходного кода Django или в вашем собственном коде. Что мне нравится в Eclipse, так это то, что как только вы привыкнете к среде, вы также сможете использовать ее для программирования на C / C ++, Java, JavaScript, Python и Flex.
Aptana для Eclipse . Это помогает при разработке интерфейсов AJAX и редактировании шаблонов Django иметь достойный редактор / отладчик Javascript + HTML.
TextMate . Я' Мы создали проект TextMate, включающий все исходные коды Django, и сохранили его в исходном каталоге Django. Таким образом, я могу быстро выполнить поиск проекта в исходном коде Django и одним щелчком открыть исходный файл. Вы также можете настроить его так, чтобы вы могли переключаться между редакторами Eclipse и TextMate и автоматически перезагружать их.
Приличный редактор MySQL или SQLite. phpMySQLAdmin - это нормально, но иногда полезно иметь отдельный инструмент. SequelPro (ранее CocoaMySQL) и Navicat - все довольно хорошо подходят для MySQL. Одним из преимуществ является то, что после развертывания приложения вы можете использовать эти инструменты для удаленного доступа к серверу базы данных развертывания и настройки его со своего рабочего стола. На стороне SQLite SQLiteManager и Base являются хорошими коммерческими инструментами, как и бесплатный FireFox SQLite Manager . По крайней мере, вы можете наблюдать за тем, что делает Django под капотом.
Я использую Subversion для контроля версий в основном потому, что он работает на автономном Mac Mini, который сохраняет в массив Drobo RAID плюс автоматически выполняет резервное копирование всего на пару других внешних дисков. . Это поверх Time Machine (да, я параноик :-) Раньше я использовал поддержку SVN Eclipse, но теперь я большой поклонник Версий . В какой-то момент, когда я смогу придумать хорошую схему зеркалирования, я переключусь на Mercurial, Git или Bazaar, но пока это работает довольно хорошо
Терминал плюс куча сценариев оболочки. У каждого есть своя версия этого. Я довольно ленив, когда дело касается этих вещей, поэтому я установил кучу ярлыков bash, чтобы помочь ускорить повторяющиеся административные задачи Django. Я опубликовал их некоторое время назад.
Большинство из них можно получить бесплатно или за умеренную плату (<100 долларов США). Но если бы мне пришлось выбирать «обязательные» элементы для разработки Django на Mac, это были бы Eclipse и PyDev.
Я уверен, что кое-что я пропустил. Приятно слышать, какие инструменты используют все остальные.