2016-03-19 6 views
0

Я создаю веб-приложение на django. В рамках этого, я создал один HTML форму, как следующее:Рендеринг ошибки проверки модели django в шаблоне

<form method="post" action="/voting/add_state/">{% csrf_token %} 
    State name:<br> 
    <input type="text" name="state_name"><br> 
    <input type="submit" value="Submit"> 
</form> 

В models.py я добавил уникальные проверки ограничения на имя, как следующее:

class State(models.Model): 
    name = models.CharField(max_length=200, unique=True) 
    vote_counted = models.BooleanField(default=False) 

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

+0

Как вы сохраняете данные POST? Можете ли вы разместить соответствующий код. – Selcuk

+0

@Selcuk, я бы предположил, что он ничего не изменил из метода сохранения по умолчанию Django. –

+0

@ChuckLoganLim Это не похоже на шаблон из шаблона. – Selcuk

ответ

0

Django имеет Form обработка встроенная. Django имеет «Model Forms», который автоматически отображает форму для вашей модели. Если вы передадите его через представление и ссылаетесь на него в контексте, он автоматически генерирует html для вас, но если вы хотите больше контролировать то, что отображается в шаблоне, вы можете ссылаться на атрибуты формы, которые создает Django Model Form.

Я настоятельно рекомендую работать в рамках проекта Django для создания форм; он предоставляет множество шаблонов для создания, проверки и абстрагирования форм и особенно компетентен для простых форм, подобных этим.

Вот пример:

models.py

class State(models.Model): 
    name = models.CharField(max_length=200, unique=True) 
    vote_counted = models.BooleanField(default=False) 

forms.py

class StateForm(forms.ModelForm): 
    model = State 
    fields = (name,) 

views.py

from django.views.generic.edit import FormView 

class StateForm(FormView): 
    template_name = 'state_form.html' 
    form_class = StateForm 
    success_url = '/thanks/' 

STA te_form.html (пример автогенерируемой формы)

{{ form }} 

state_form.html (пример пользовательской формы)

<form action="/" method="post"> 
    {% csrf_token %} 
    {{ form.errors }} 
    {% for field in form %} 
     <input type="{{ field.type }}" name='{{ field.name }}' class="submit" value="{{ field.value}}"> 
    {% endfor %} 
    <input type="submit" name='submit" value="Submit"> 
</form> 

Ссылка:

Джанго форма: https://docs.djangoproject.com/en/1.9/topics/forms/

Django модель Формы: https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/

Джанго Generic Просмотров: https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView

0

Создайте форму, основанную на модели

#forms.py 
from django import forms 
from .models import State 

class StateForm(forms.ModelForm): 

    class Meta: 
     model = State 
     fields = ('name',) 

теперь используют эту форму ваших мнений

#views.py 
from django.views.generic import FormView 
from .forms import StateForm 

class MyView(FormView): 

    template_name = 'template.html' 
    form_class = StateForm 
    success_url = '/my-url-to-redirect-after-submit/' 

шаблона.HTML

<form method="post"> 
    {% csrf_token %} 
    Name 
    {{ form.name }} 
    {{ form.name.errors }} 
    <input type="submit" value="Create"> 
</form> 
0

Вы можете создать форму для State модели и создать валидатор, так что если пользователь попробовать с таким же именем, форма поднять сообщение что-то вроде этого:

models.py 
class State(models.Model): 
    name = models.CharField(max_length=200, unique=True) 
    vote_counted = models.BooleanField(default=False) 

forms.py 
def unique_name(value): 
    exist = State.objects.filter(name=value) 
    if exist: 
     raise ValidationError(u"A state with the name %s already exist" % value) 

class StateForm(forms.Form): 
    name = forms.CharField(label=('Name:'), validators=[unique_name]) 

Тогда вам просто необходимо отобразить StateForm в шаблоне.

Смежные вопросы