【问题标题】:Django custon form with validate带有验证的 Django 自定义表单
【发布时间】:2021-06-22 21:00:48
【问题描述】:

我对表单和 Django 有一些问题。 我想从模型中做一个自定义(列和样式)表单。但是经过几个小时的尝试,我认为这是不可能的。 所以我决定不创建forms.ModelForm,而是创建forms.Form,以便自定义我的表单。但是这样我就无法保留验证... 我尝试的最后一件事是,它在模板文件中手动编写验证,它可以工作,但是当我提交错误的表单时,当它刷新时,所有数据都是松散的,我只看到错误消息...... 所以它让我发疯......我只是想用 django 做一个漂亮的表格...... 提前致谢

forms.py

class PatienceForm(forms.ModelForm):
class Meta:
    model = Patience
    fields = ('nom', 'prenom', 'age', 'email')

模板.html

<form method="POST" accept-charset="utf-8">
{% csrf_token %}
      <p><label for="id_nom">Nom :</label> <input type="text" name="nom" maxlength="200" required id="id_nom"></p>
<p><label for="id_prenom">Prenom :</label> <input type="text" name="prenom" maxlength="200" required id="id_prenom"></p>
 <p><label for="id_age">Age :</label> <input type="number" name="age" required id="id_age"></p>
 <p><label for="id_email">Email :</label> <input type="email" name="email" maxlength="254" required id="id_email"></p>
{% for err in form.email.errors %}
 {{err}}
{% endfor %}

    <button type="submit" class="save btn btn-default">Save</button>
视图.py
def post_essaie(request):
if request.method == "POST":
    form = PatienceForm(request.POST)
    if form.is_valid():
        logging.info('Hello')
        post = form.save(commit=False)
        post.published_date = timezone.now()
        post.save()
        return render(request, 'blog/succes.html')
    return render(request, 'blog/teste.html', {'form': form})
else:
    form = PatienceForm()
return render(request, 'blog/teste.html', {'form': form})

提前感谢您的帮助

【问题讨论】:

  • 所以,据我了解,您想设置表单样式,对吧?
  • 是的,没错!

标签: django forms model


【解决方案1】:

为您的 form.py :

class PatienceForm(forms.Form):
    nom = forms.CharField(max_length=200,label='Nom')
    prenom = forms.CharField(max_length=200)
    age = forms.integerField(max_length=200)
    email = forms.EmailField(max_length=254)
    
# use clean to verify your form
    def clean(self): 
        cleaned_data = super(ContactForm, self).clean()
        nom = cleaned_data.get('nom')
        prenom = cleaned_data.get('prenom')
        age = cleaned_data.get('age')
        email = cleaned_data.get('email')
        if not name and not email and not message:
            raise forms.ValidationError('le formulaire est vide')

在你的views.py中你可以使用:

from django.shortcuts import render
from .forms import ContactForm

def post_essaie(request):
    if request.method == 'POST':
        form = PatienceForm(request.POST)
        if form.is_valid():
            logging.info('Hello')
            nom = form.cleaned_data['nom']
            prenom = form.cleaned_data['prenom']
            age = form.cleaned_data['age']
            email = form.cleaned_data['email']
            # here create your entry with all the data from your form then add  
            # your published_date
            post = Patience(nom=nom, prenom=prenom, age=age,
                            email=email, published_date = timezone.now())

            post.save()
            return render(request, 'blog/succes.html')
    else:
        form = PatienceForm()
    return render(request, 'blog/teste.html', {'form': form})

Voila Bonne journée !!

【讨论】:

  • 这行不通。当我尝试写一封糟糕的电子邮件时,它被认为是有效的,没有消息。
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2018-02-08
  • 2011-05-04
相关资源
最近更新 更多