2009-07-30 5 views

答えて

21

...

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ですようにそれを定義することができます:私はちょうど私の最新のプロジェクトでCommaSeparatedIntegerFieldを扱っているために起こっ

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

フィールドに対応するmax_lengthにカンマが含まれていますか? – khalid13

+2

はい、それは文字列として含まれています。 –

6

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

をそして、このようにそれを取り込みます。私はMySQLを使用していましたが、コンマで区切られた整数値の文字列を供給するように思えました。 '1,2,3,4,5'。空白のままにしたい場合は、空の文字列を渡します。

CharFieldのように動作し、私のために奇妙な方法で生き残りました。私は "[1、2、3、4、5]"のような値で終わりました。だから注意してください!

2

私はこのフィールドを追加したいと思いますis depricated in Django 1.9。 Django 1.9以降では、CharFieldvalidators=[validate_comma_separated_integer_list]を使用する必要があります。バージョンの

0

作品大きい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: 

コーディングハッピーを実行した後に選択するには、次のオプションになるだろう!

関連する問題