Формы Django: показать ChoiceField для некоторых пользователей, поставить то же значение для других пользователей - PullRequest
0 голосов
/ 09 августа 2011

Общее

У меня есть два вида пользователей и одно поле («кластер»), которое я хочу использовать по-разному:

Старшие пользователи - выберет кластер из списка.

Младшие пользователи - поле будет скрыто от них и всегда будет вводить одно и то же значение в форму поля + модель + ячейка базы данных.


Моя проблема

Для старших все отлично работает - поле показывается и их можно выбрать.

Проблема в том, что у младших пользователей поле скрыто (как и должно быть), но тогда я получаю «Это поле обязательно для заполнения» Ошибка.

Я пытался добавить в models.py параметры blank = True, null = True , но это не помогло.


Мой код

Forms.py:

class myModelForm(ModelForm):
    class Meta:
        model = myModel
    def __init__(self, *args, **kwargs):
        super(myModelForm, self).__init__(*args, **kwargs)
        self.fields['cluster'] = forms.ChoiceField(choices=[(x,x) for x in myModel.objects.get(f_id=USER_FAMILY).supportedClustersInFamily.split(',')])

Models.py:

class myModel(models.Model):
    cluster = models.CharField(max_length=20, blank=True)

Views.py:

def proccessMyModel(request):
    form = myModelForm(request.POST or None)
    if request.method == "POST" and form.is_valid():
        result = form.save(commit=False)
        if not request.user.has_perm('my_webapp.senior_permission'):
            result.cluster= "DEFAULT CLUSTER"
        result.save()
        return HttpResponseRedirect(reverse('my_webapp.views.index'))
    return render_to_response("my_webapp/myModelForm.html", {
        "form": form,
    }, context_instance=RequestContext(request))

myForm.html:

<form action="/my_webapp/myModelForm" method="post">{% csrf_token %}
    {% if perms.my_webapp.senior_permission %}
    <div class="fieldWrapper">
        <label for="id_cluster">Cluster:</label>
        {{ form.cluster }}
    </div>
    {% endif %}
    <p><input type="submit" value="submit" /></p>
</form>


Отчаянный текст ...

Я много искал и нигде не могу найти ответ! Спасибо за ваше время !!

1 Ответ

1 голос
/ 09 августа 2011

Я думаю, что вы должны поставить обязательный = False в ваших формах.

Примерно так:

forms.ChoiceField (choices = somechoices)

Посмотрите на это

https://docs.djangoproject.com/en/dev/ref/forms/fields/#required

...