Django: CharField with fixed length, how?

Posted by Giovanni Di Milia on Stack Overflow See other posts from Stack Overflow or by Giovanni Di Milia
Published on 2010-03-18T14:56:32Z Indexed on 2010/03/18 20:31 UTC
Read the original article Hit count: 531

Filed under:
|

Hi everybody, I wold like to have in my model a CharField with fixed length. In other words I want that only a specified length is valid.

I tried to do something like

volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)

but it gives me an error (it seems that I can use both max_length and min_length at the same time).

Is there another quick way?

Thanks

EDIT:

Following the suggestions of some people I will be a bit more specific:

My model is this:

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('Volume Number')
    date_publication = models.CharField('Date of 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))

What I want is that the volumenumber must be exactly 4 characters.

I.E. if someone insert '4b' django gives an error because it expects a string of 4 characters.

So I tried with

volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)

but it gives me this error:

Validating models...
Unhandled exception in thread started by <function inner_run at 0x70feb0>
Traceback (most recent call last):
  File "/Library/Python/2.5/site-packages/django/core/management/commands/runserver.py", line 48, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Python/2.5/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.5/site-packages/django/core/management/validation.py", line 28, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/Library/Python/2.5/site-packages/django/db/models/loading.py", line 131, in get_app_errors
    self._populate()
  File "/Library/Python/2.5/site-packages/django/db/models/loading.py", line 58, in _populate
    self.load_app(app_name, True)
  File "/Library/Python/2.5/site-packages/django/db/models/loading.py", line 74, in load_app
    models = import_module('.models', app_name)
  File "/Library/Python/2.5/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/Giovanni/src/djangoTestSite/../djangoTestSite/journaldb/models.py", line 120, in <module>
    class Volume(models.Model):
  File "/Users/Giovanni/src/djangoTestSite/../djangoTestSite/journaldb/models.py", line 123, in Volume
    volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)
TypeError: __init__() got an unexpected keyword argument 'min_length'

That obviously doesn't appear if I use only "max_length" OR "min_length".

I read the documentation on the django web site and it seems that I'm right (I cannot use both together) so I'm asking if there is another way to solve the problem.

Thanks again

© Stack Overflow or respective owner

Related posts about django

Related posts about django-models