Вы можете использовать getattr , чтобы получить значение атрибута по имени. Для вашего примера:
def edit_topic_text(topicshortname, whichcolumn):
thetopic = Topic.objects.get(topic__shortname__iexact = topicshortname)
content = getattr(thetopic, whichcolumn)
return render_to_response('topic_text_edit.html', locals())
Однако вы также должны знать о последствиях для безопасности этого. Пользователи смогут редактировать любое поле в понравившейся модели, изменив URL.
Вам следует либо проверить значение какого столбца, прежде чем делать что-либо еще с этими данными, либо ограничить возможности в urlconf более конкретным регулярным выражением, например:
(r'^/(?P<topicshortname>\d+)/(?P<whichcolumn>(Notes|Objectives))/edit/$', 'mysyte.myapp.views.edit_topic_text'),
Вы также упомянули поля «Примечания» и «Цели», но получаете доступ к полю «цель», поэтому вам может потребоваться сопоставить значения какого столбца с именем интересующего вас поля, например:
(r'^/(?P<topicshortname>\d+)/Objectives/edit/$', 'mysyte.myapp.views.edit_topic_text', {'whichcolumn': 'objective'}),
(r'^/(?P<topicshortname>\d+)/Notes/edit/$', 'mysyte.myapp.views.edit_topic_text', {'whichcolumn': 'note'}),
Еще одна вещь, о которой вы должны знать, это то, что вы дважды обращались к базе данных, дважды вызывая Topic.objects.get (...). Вы должны повторно использовать значение thetopic.