Contrairement à la gestion normale des essais et des exceptions de python, je suis coincé avec la détection des exceptions et l'affichage de son contenu, donc je vais en garder une trace.
Cette fois, j'aimerais écrire un article sur l'affichage d'un message d'erreur lorsqu'un contrôle de validation unique est intercepté lors de la vérification des variations sur un formulaire ou un modèle.
Je développais une fonction de filtre Flou simple en utilisant OpenCV, et je voulais demander à l'utilisateur de saisir la taille du filtre et de déterminer la force de l'effet (taille du filtre) à partir de cette valeur.
Donc, j'ai créé un formulaire en utilisant la classe Form, mais comme j'ai utilisé le filtre gaussien, j'obtiens une erreur si la valeur entrée est paire.
De là, j'ai pensé à créer un contrôle de variation unique pour la classe Form qui "gère une erreur si la valeur d'entrée est paire".
Si vous faites une erreur, je suis désolé. Vous n'avez pas à vous soucier trop de models.py.
app/urls.py
app_name = 'app'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
models.py
class Image(models.Model):
img_src = models.ImageField(upload_to=get_upload_to)
form.py
def is_oddnumber(value): #Fonction pour vérifier si c'est bizarre
if value % 2 == 0:
raise ValidationError('Veuillez saisir un nombre pair')
class Form(forms.ModelForm):
class Meta:
model = Image
fields = ('img_src')
filter_size = forms.IntegerField(
required=True,
max_value=100,
min_value=1,
validators=[is_oddnumber], #Supplémentaire est activé_Effectuer un contrôle de validation avec un nombre impair
)
views.py
class IndexView(generic.TemplateView)
template_name = index.html
def get(self, request, *args, **kwargs):
form = Form()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = Form(request.POST, request.FILES)
if form.is_valid():
return redirect(○)
return render(request, self.template_name, {'form': form}) #Définissez le formulaire contenant le message d'erreur et réaffichez-le
index.html
<form action="{% url 'app:index' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
{% if form.errors %}
<ul>
{% for error in form.non_field_errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
Il semble que le message d'erreur qui est l'argument de rise ValidationError est stocké dans form.errors.
Par conséquent, si une erreur de variation se produit, le message d'erreur peut être affiché sans transition d'écran en réaffichant le formulaire contenant le message d'erreur dans form.errors avec rendu.
Recommended Posts