web-dev-qa-db-ja.com

djangoでCommaSeparatedIntegerFieldを使用するにはどうすればよいですか?

ここにはほとんどドキュメントがありません: http://docs.djangoproject.com/en/dev/ref/models/fields/#commaseparatedintegerfield

たぶん、誰かがDjangoにCommaSeparatedIntegerFieldを入力する方法を教えてくれませんか?

-ありがとう。

38
stephen

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")
22
Triptych

このフィールド がDjango 1.9 で非表示になっていることを追加します。 Django 1.9以降では、validators=[validate_comma_separated_integer_list]付きのCharFieldを使用する必要があります。

12
filtfilt

Django 1.9以降のバージョンで動作します

最初のステップ:-これをインポート(新しいバージョンでは変更される可能性があるため、再確認してください)

from Django.core.validators import validate_comma_separated_integer_list

2番目のステップ:-フィールドの書き込み

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: 

ハッピーコーディング!

7
Talha Gillani

私はたまたま私の最新のプロジェクトでCommaSeparatedIntegerFieldを処理しました。私はMySQLを使用していましたが、コンマ区切りの整数値の文字列を提供することは、非常にDBフレンドリーであるように見えました。 '1、2、3、4、5'。空白のままにする場合は、空の文字列を渡します。

CharFieldのように動作し、奇妙な方法で動作します。データベースの角かっこを含め、 "[1、2、3、4、5]"のような値になりました!気をつけて!

6
tarequeh