Django: полевой выбор Набора от представления?

У меня есть некоторые <selects> то, что я должен заполнить с некоторыми choices это зависит от, в настоящее время входил в систему пользователь. Я не думаю, что это возможно (или легко) сделать из класса формы, также - я могу просто оставить незаполненный выбор и устанавливать их в представлении вместо этого? Или какой подход я должен проявить?

7
задан mpen 12 August 2010 в 01:16
поделиться

3 ответа

Не уверен, что это лучший ответ, но в прошлом я устанавливал варианты выбора поля выбора в init формы - вы потенциально можете передать свой выбор конструктору вашей формы ...

5
ответ дан 7 December 2019 в 05:15
поделиться

Учитывая, что вы включили пользователя в качестве параметра, я бы решил эту проблему с помощью специального тега.

В вашем 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 /

1
ответ дан 7 December 2019 в 05:15
поделиться

Вы можете создавать свою форму динамически в вашем представлении (ну, на самом деле я бы предпочел оставить код вне представления в его собственной функции и просто вызвать его в представлении, но это просто детали)

Я сделал это в одном проекте:

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 в зависимости от текущего пользователя и добавить любое поле, которое вам нужно, вместе с вариантами выбора, но это основной принцип, Остальное я оставлю на усмотрение читателя.

2
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: