У меня есть некоторые <selects>
то, что я должен заполнить с некоторыми choices
это зависит от, в настоящее время входил в систему пользователь. Я не думаю, что это возможно (или легко) сделать из класса формы, также - я могу просто оставить незаполненный выбор и устанавливать их в представлении вместо этого? Или какой подход я должен проявить?
Не уверен, что это лучший ответ, но в прошлом я устанавливал варианты выбора поля выбора в init формы - вы потенциально можете передать свой выбор конструктору вашей формы ...
Учитывая, что вы включили пользователя в качестве параметра, я бы решил эту проблему с помощью специального тега.
В вашем app / templatetags / custom_tags.py что-то вроде этого:
@register.simple_tag
def combo(user, another_param):
objects = get_objects(user, another_param)
str = '<select name="example" id="id_example">'
for object in objects:
str += '<option value="%s">%s</option>' % (object.id, object.name)
str += '</select>'
return mark_safe(str)
Затем в вашем шаблоне:
{% load custom_tags %}
{% special_select user another_param %}
Подробнее о пользовательских тегах http://docs.djangoproject.com/en/dev/howto/ custom-template-tags /
Вы можете создавать свою форму динамически в вашем представлении (ну, на самом деле я бы предпочел оставить код вне представления в его собственной функции и просто вызвать его в представлении, но это просто детали)
Я сделал это в одном проекте:
user_choices = [(1, 'something'), (2, 'something_else')]
fields['choice'] = forms.ChoiceField(
choices=user_choices,
widget=forms.RadioSelect,
)
MyForm = type('SelectableForm', (forms.BaseForm,), { 'base_fields': fields })
form = MyForm()
Очевидно, вы захотите создать user_choices
в зависимости от текущего пользователя и добавить любое поле, которое вам нужно, вместе с вариантами выбора, но это основной принцип, Остальное я оставлю на усмотрение читателя.