Lolka
Да, громандное спасибо, smal, Daevaorn. Теперь получилось. Не догадался использовать словарь self.fields, создавал поля непосредственно, отчего они уже не работали.
Но, пришлось несколько изменить код, т.к. ModelForm принимает еще разное, как то request.POST при отправке формы.
Таким образом (в меру своего понимания процесса, может и наворотил лишнего):
...
class TestForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# city придет в kwargs при первой инициализации и надо будет его вытащить,
# в противном случае ModelForm'овский __init__ ругнется на неизвестный аргумент
if 'city' in kwargs:
self.city = kwargs.pop('city')
else:
# один раз инициализированному полю уже не понадобится city, так что все будет хорошо и после request.POST
# даже в таком случае
self.city = None
super(TestForm, self).__init__(*args, **kwargs)
...
можна і так, але можна використовувати і так :
testform = TestForm(City.objects.get(pk = some_city_id), request.POST)
(для попереднього варіанту форми)