2009-07-30 23 views

cevap

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) 

Kontrol dışarı regex doğrulayıcı söyledi. Tamsayılar ve virgüllerin bir listesini verdiğiniz sürece, django şikayet etmeyecektir.

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

Ve bu şekilde doldurmak:

sadece temelde Charfield gibi tanımlayabilirsiniz

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

Alana karşılık gelen max_length'in virgül içerip içermediğini biliyor musunuz? – khalid13

+2

evet, bir dizi olduğu gibi içerir. –

6

Ben sadece son projede CommaSeparatedIntegerField ile ele alınmıştır oldu. MySQL kullanıyordum ve bir virgülle ayrılmış tamsayı değerleri dizisi sağlamak gibi görünüyordu çok DB dostu örn. '1,2,3,4,5'. Boş bırakmak isterseniz, boş bir dizgeyi iletmeniz yeterlidir.

CharField gibi davranıyor ve benim için garip bir şekilde kandırıyorum. Veritabanımdaki parantezler dahil olmak üzere "[1, 2, 3, 4, 5]" gibi değerlerle bitti! Öyleyse dikkat et!

0

İşleri büyüktür Django 1.9 den

İlk Adım: -İthalat bu (yeni sürümlerinde değişiklik olabilir, bu nedenle iki kez kontrol)

from django.core.validators import validate_comma_separated_integer_list 

İkinci Adım: -Yazma Alanı

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 

Not: Eğer önceden oluşturulmuş veritabanına sütun ekleyerek eğer Kodlama 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: 

Mutlu çalıştırdıktan sonra seçim için aksi takdirde aşağıdaki seçeneği alacağı default = '' kullandığınızdan emin olun !

İlgili konular