Как я могу использовать CommaSeparatedIntegerField в Django? - PullRequest
37 голосов
/ 30 июля 2009

Здесь почти нет документации для этого: http://docs.djangoproject.com/en/dev/ref/models/fields/#commaseparatedintegerfield

Может быть, кто-то может, например, показать мне, как заполнить CommaSeparatedIntegerField в Django?

-Спасибо.

Ответы [ 4 ]

22 голосов
/ 30 июля 2009

Глядя на источник для django ...

class CommaSeparatedIntegerField(CharField):
    def formfield(self, **kwargs):
        defaults = {
            'form_class': forms.RegexField,
            'regex': '^[\d,]+$',
            'max_length': self.max_length,
            'error_messages': {
                'invalid': _(u'Enter only digits separated by commas.'),
            }
        }
        defaults.update(kwargs)
        return super(CommaSeparatedIntegerField, self).formfield(**defaults)

Проверьте этот валидатор регулярных выражений. Похоже, что пока вы дадите ему список целых чисел и запятых, django не будет жаловаться.

Вы можете определить его как charfield в основном:

class Foo(models.Model):
    int_list = models.CommaSeparatedIntegerField(max_length=200)

И напишите это так:

f = Foo(int_list="1,2,3,4,5")
11 голосов
/ 14 июля 2017

Я хотел бы добавить, что это поле ограничено в Django 1.9 . В Django 1.9+ следует использовать CharField с validators=[validate_comma_separated_integer_list].

6 голосов
/ 31 июля 2009

Мне довелось иметь дело с CommaSeparatedIntegerField в моем последнем проекте. Я использовал MySQL, и казалось, что поставка строки целочисленных значений через запятую очень удобна для БД, например. '1,2,3,4,5'. Если вы хотите оставить это поле пустым, просто передайте пустую строку.

Он действует как CharField и выглядит странно для меня ... Я получил значения типа "[1, 2, 3, 4, 5]", включая скобки в моей базе данных! Так что будьте осторожны!

5 голосов
/ 26 февраля 2018

Работает для версий больше, чем Django 1.9

Первый шаг: - Импортировать это (может измениться в более новых версиях, поэтому дважды проверьте это)

from django.core.validators import validate_comma_separated_integer_list

Второй шаг: - Поле ввода

class RestaurantLocation(models.Model):
    name = models.CharField(max_length=200)
    location = models.CharField(max_length=200,null=True,blank=True)
    category = models.CharField(max_length=200,null=True,blank=False)
    choices_field = models.CharField(validators=[validate_comma_separated_integer_list],max_length=200, blank=True, null=True,default='')
    def __str__(self):
        return self.name

Примечание: Пожалуйста, убедитесь, что вы используете default = '', если вы добавляете столбец в уже созданную базу данных, в противном случае вы получите следующую опцию для выбора после запуска python manage.py migrate


You are trying to add a non-nullable field 'choices_field' to restaurantlocation without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a 
null value for this column)
2) Quit, and let me add a default in models.py
Select an option: 

Счастливого кодирования!

...