Scheme и Vocabulary - это все придумано для работы с контекстом, но не с запросом.
Но контекст можно сделать динамически генерируемым с учетом запроса. На вскидку - в методе getContent() формы отдавать адаптер, проксирующий реальный контекст с учетом данных запроса.
class EditMyObject(z3c.form.EditForm):
def getContent(self):
return IMyObjectView(self.context, self.request) # делает field зависимым от request
тогда в коде vocabulary2 можно взять context.field1. Разумеется это предположение верно только если context при формировании vocabulary берется тот, который возвращается методом getContent() формы. Так ли это на самом деле, я не знаю.
Это, конечно, все в порядке мозгового штурма, на деле я так не пробовал и предпочел бы более естесственный путь - javascript. Тем не менее, если попробуешь с getContent, напиши получилось ли. Особенно интересно, что будет взято в качестве контекста при генерировании vocabulary. Может быть, он даже и проще и надежнее, но придется нажимать form submit после заполнения field1.
Другой путь делать контектс динамическим - это отдавать траверсером LocationProxy “реального” (ZODB-шного контекста). Еще более правильно - добавляя специальный namespace. Это решение для больших расширяемых систем, как мне кажется архитектурно наиболее логичное.
Sleepwalker
Посмотри в сторону zc.sourcefactory. Для поля Choice указывай как source - FilteringSource например (http://pypi.python.org/pypi/zc.sourcefa … #filtering). А вообще почитай документацию может что другое поможет.
Ну, это не поможет, по-моему. Данная библиотека просто предоставляет набор удобств. Сколько я не пытался ее использовать, возвращался к обычному vocabulary.