Je voudrais avoir dans mon modèle un CharField avec une longueur fixe. En d'autres termes, je veux qu'une seule et unique longueur soit valide.
J'ai essayé de faire quelque chose comme
volumenumber = models.CharField('Numéro de volume', max_length=4, min_length=4)
mais cela me donne une erreur (il semble que je ne peux pas utiliser à la fois max_length et min_length en même temps).
Y a-t-il un autre moyen rapide ?
Mon modèle est le suivant :
class Volume(models.Model):
vid = models.AutoField(primary_key=True)
jid = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name="Journal")
volumenumber = models.CharField('Numéro de volume')
date_publication = models.CharField('Date de publication', max_length=6, blank=True)
class Meta:
db_table = u'volume'
verbose_name = "Volume"
ordering = ['jid', 'volumenumber']
unique_together = ('jid', 'volumenumber')
def __unicode__(self):
return (str(self.jid) + ' - ' + str(self.volumenumber))
Ce que je veux, c'est que le numéro de volume
doit être exactement de 4 caractères.
Par exemple, si quelqu'un insère '4b', Django renvoie une erreur car il attend une chaîne de 4 caractères.
J'ai donc essayé avec
volumenumber = models.CharField('Numéro de volume', max_length=4, min_length=4)
mais cela me donne cette erreur :
Validation des modèles...
Exception non gérée dans un thread démarré par
Traceback (étapes de pile les plus récentes):
File "/Library/Python/2.5/site-packages/django/core/management/commands/runserver.py", ligne 48, dans inner_run
self.validate(display_num_errors=True)
File "/Library/Python/2.5/site-packages/django/core/management/base.py", ligne 249, dans validate
num_errors = get_validation_errors(s, app)
File "/Library/Python/2.5/site-packages/django/core/management/validation.py", ligne 28, dans get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/Library/Python/2.5/site-packages/django/db/models/loading.py", ligne 131, dans get_app_errors
self._populate()
File "/Library/Python/2.5/site-packages/django/db/models/loading.py", ligne 58, dans _populate
self.load_app(app_name, True)
File "/Library/Python/2.5/site-packages/django/db/models/loading.py", ligne 74, dans load_app
models = import_module('.models', app_name)
File "/Library/Python/2.5/site-packages/django/utils/importlib.py", ligne 35, dans import_module
__import__(name)
File "/Users/Giovanni/src/djangoTestSite/../djangoTestSite/journaldb/models.py", ligne 120, dans
class Volume(models.Model):
File "/Users/Giovanni/src/djangoTestSite/../djangoTestSite/journaldb/models.py", ligne 123, dans Volume
volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)
TypeError: __init__() a reçu un argument de mot-clé inattendu 'min_length'
Cela n'apparaît évidemment pas si j'utilise uniquement "max_length" OU "min_length".
J'ai lu la documentation sur le site web de Django et il semble que j'ai raison (je ne peux pas les utiliser ensemble), c'est pourquoi je demande s'il y a une autre façon de résoudre le problème.