Django: CharField с фиксированной длиной, как?

Мне пустошь нравится иметь в моей модели CharField с фиксированной длиной. Другими словами, я хочу это, только указанная длина допустима.

Я пытался сделать что-то как

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

но это дает мне ошибку (кажется, что я могу использовать и max_length и min_length одновременно).

Есть ли другой быстрый путь?

Спасибо

Править:

После предложений некоторых людей я буду немного более конкретным:

Моя модель - это:

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))

То, что я хочу, то, что volumenumber должны быть точно 4 символа.

Т.Е. если кто-то вставляет '4b' django, дает ошибку, потому что она ожидает строку 4 символов.

Таким образом, я попробовал

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

но это дает мне эту ошибку:

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'

Это, очевидно, не появляется, если я использую только "max_length" ИЛИ "min_length".

Я прочитал документацию на django веб-сайте, и кажется, что я прав (я не могу использовать обоих вместе), таким образом, я спрашиваю, существует ли другой способ решить проблему.

Еще раз спасибо

61
задан Giovanni Di Milia 18 March 2010 в 20:17
поделиться

1 ответ

Экземпляры полей модели базы данных CharField имеют только параметр max_length , как указано в документах . Вероятно, это связано с тем, что в SQL есть только эквивалент ограничения максимальной длины символа.

Объекты поля формы CharField , с другой стороны, имеют параметр min_length . Таким образом, вам придется написать настраиваемую ModelForm для этой конкретной модели и заменить стандартную форму модели администратора на настраиваемую.

Примерно так:

# admin.py

from django import forms

...

class VolumeForm(forms.ModelForm):
    volumenumber = forms.CharField(max_length=4, min_length=4)

    class Meta:
        model = Volume


class VolumeAdmin(admin.ModelAdmin):
    form = VolumeForm

...

admin.site.register(Volume, VolumeAdmin)
40
ответ дан 24 November 2019 в 16:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: