Domanda

Django non rispetta l'attributo max_length del campo del modello di Textfield convalida durante la convalida di un modelform.

Quindi definisco un fazzoletto limitato ereditato dai modelli.Textfield e aggiunto bit di convalida simili a modelli.charfield:

from django.core import validators

class LimitedTextField(models.TextField):
    def __init__(self, *args, **kwargs):
        super(LimitedTextField, self).__init__(*args, **kwargs)
        self.max_length = kwargs.get('max_length')
        if self.max_length:
            self.validators.append(validators.MaxLengthValidator(self.max_length))

    def formfield(self, **kwargs):
        defaults = {'max_length': self.max_length}
        defaults.update(kwargs)
        return super(LimitedTextField, self).formfield(**defaults)
.

Ma questo non ha ancora alcun effetto sulla convalida di ModelForm.

Cosa mi manca?Qualsiasi aiuto è molto apprezzato.

Grazie,

omat

È stato utile?

Soluzione

A partire da Django 1.2 Questo può essere fatto per validatori a livello di modello, come spiegato qui: https://docs.djangoproject.com/it/stable/ref/validator/

from django.core.validators import MaxLengthValidator

class Comment(models.Model):
    comment = models.TextField(validators=[MaxLengthValidator(200)])
.

Poiché Django 1.7, è possibile utilizzare max_length che viene applicato solo nel lato client. Vedi qui

Altri suggerimenti

È possibile applicare una lunghezza massima per un campo di testo definendo un charfield con un widget Textarea come questo:

class MyClass(models.Model):
    textfield = models.TextField()

class MyForm(forms.ModelForm):
    textfield = forms.CharField(
        max_length = 50,
        widget = forms.Textarea
    )

    class Meta:
        model = MyClass
        fields = ('textfield',)
.

Nessuna necessità di importare MaxLengthValidator da Validars For Django 2.x

from django.db import models
class Comment(models.Model):
  comment = models.TextField(max_length=200)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top