Контроль, является ли поле уникальным в форме Django - PullRequest
1 голос
/ 09 июня 2019

Первая ошибка: я хочу проверить, уникально ли значение поля group_name в модели Я попробовал этот код, но, кажется, не работает, как будто я поместил новое значение в это поле, нет сообщения, но данные не были добавлены в таблицу

Вторая ошибка: у меня нет сообщений. Может быть, я не должен перенаправлять страницы?

мой код в views.py:

def group_create(request):
    group_form = GroupForm()

    if request.method == "POST":
        group_form = GroupForm(request.POST)

        if group_form.is_valid():
            group_name = group_form.cleaned_data.get('group_name')

            if Group.objects.filter(group_name=group_name).exists:

                messages.error(request, 'this group already exists')

            else:
                group_form.save()
                messages.success(request, 'Group created')

        return redirect('group_list')

    return render(request, 'imports/group_create.html', {
        "group_form": group_form,
    })

моя модель:

class Group(models.Model):
    group_id = models.AutoField(primary_key=True)
    groupParent_id = models.ForeignKey('self', blank=True, null=True, related_name='Parent', on_delete=models.CASCADE)
    group_name = models.CharField(max_length=100, null=False, blank=False, unique=True)

мой HTML:

<div class="container-fluid">

<!-- Code pour message type toaster -->
            {% if messages %}
                <div class="row">
                    <div class="col-xs-12">

                        <ul class="alert" role="alert">
                            {% for message in messages %}
                            <p {% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</p>
                            {% endfor %}
                        </ul>
                    </div>
                </div>
            {% endif %}
<!-- fin messages -->

    <div class="row">
        <div class="col-lg-2 col-md-2 col-sm-2 sidebar">
             {%  block sidebar %}{%  endblock %}
        </div>
        <div class="col-lg-10 col-lg-offset-2 col-md-10 col-md-offset-2 col-sm-10 col-sm-offset-2 content">
                {% block heading %}{% endblock %}
                {%  block page %}{% endblock %}
        </div>
    </div>

</div>

1 Ответ

0 голосов
/ 09 июня 2019

Django's ModelForm [Django-doc] уже проверяет уникальность отмеченных вами полей unique=True [Django-doc], как указано в документации по Взаимодействие с проверкой модели [Django-doc] :

(...)

Метод clean() модели будет вызываться перед выполнением любых проверок уникальности .(...).

Если поле недействительно, то оно добавит эту ошибку к group_form.errors [Django-doc] ,Причина, по которой вы их не видели, заключается в том, что вы, независимо от того, является ли форма действительной или нет, просто перенаправляют на представление, и, таким образом, форма отбрасывается.

Если вы отобразите форму соответственно, она добавитдополнительные сообщения в поля с ошибками:

def group_create(request):
    if request.method == "POST":
        group_form = GroupForm(request.POST)
        if group_form.is_valid():
            group_form.save()
            messages.success(request, 'Group created')
            # only in case of success
            return <b>redirect('group_list')</b>
    else:
        group_form = GroupForm()

    return render(request, 'imports/group_create.html', {
        "group_form": group_form,
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...