【问题标题】:how do I use CommaSeparatedIntegerField in django?如何在 django 中使用 CommaSeparatedIntegerField?
【发布时间】:2010-11-15 13:46:08
【问题描述】:

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

也许有人可以举例说明如何在 Django 中填充 CommaSeparatedIntegerField

-谢谢。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    查看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 就不会抱怨。

    基本上你可以像一个字符域一样定义它:

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

    然后像这样填充它:

    f = Foo(int_list="1,2,3,4,5")
    

    【讨论】:

    • 你知道字段对应的max_length是否包含逗号吗?
    【解决方案2】:

    我想添加这个字段is depricated in Django 1.9。在 Django 1.9+ 中,应使用 CharFieldvalidators=[validate_comma_separated_integer_list]

    【讨论】:

      【解决方案3】:

      适用于高于 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: 
      

      编码愉快!

      【讨论】:

      • 在views.py中使用:example_string="1,2,3,4,5" 在example_string.split(',')中使用[int(s) for s]
      【解决方案4】:

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

      它确实像一个 CharField,对我来说以一种奇怪的方式发出声音。我最终得到了像 "[1, 2, 3, 4, 5]" 这样的值,包括我数据库中的括号!所以要小心!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 2015-09-27
        • 2019-01-04
        • 2014-01-09
        相关资源
        最近更新 更多