如何在django中使用CommaSeparatedIntegerField?

38 python django django-models

这里几乎没有文档:http: //docs.djangoproject.com/en/dev/ref/models/fields/#commaseparatedintegerfield

也许有人可以通过示例向我展示如何CommaSeparatedIntegerField在Django中填充一个?

-谢谢.

Tri*_*ych 22

看看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)
Run Code Online (Sandbox Code Playgroud)

看看那个正则表达式验证器.看起来只要你给它一个整数和逗号列表,django就不会抱怨.

您可以基本上像charfield一样定义它:

class Foo(models.Model):
    int_list = models.CommaSeparatedIntegerField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

并填充它像这样:

f = Foo(int_list="1,2,3,4,5")
Run Code Online (Sandbox Code Playgroud)


fil*_*ilt 12

我想补充一点,这个字段在Django 1.9中被删除了.在Django 1.9+一个CharFieldvalidators=[validate_comma_separated_integer_list]应该被使用.


tar*_*ueh 6

我刚碰巧在我的最新项目中处理过CommaSeparatedIntegerField.我正在使用MySQL,似乎提供一串逗号分隔的整数值非常友好,例如'1,2,3,4,5'.如果要将其留空,只需传递一个空字符串即可.

它确实像CharField一样,并以一种奇怪的方式为我编造..我最终得到了像"[1,2,3,4,5]"这样的值,包括我数据库中的括号!所以小心!


Tal*_*ani 6

适用于大于Django 1.9的版本

第一步: - 导入此(可能会在较新版本中更改,因此请仔细检查)

from django.core.validators import validate_comma_separated_integer_list
Run Code Online (Sandbox Code Playgroud)

第二步: - 写字段

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
Run Code Online (Sandbox Code Playgroud)

注意: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: 
Run Code Online (Sandbox Code Playgroud)

快乐的编码!