2009-07-30 9 views

risposta

21

Guardando la fonte per 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) 

Verificare che validatore regex. Sembra che se gli dai un elenco di numeri interi e virgole, django non si lamenterà.

È possibile definire solo come un Charfield fondamentalmente:

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

e popolare in questo modo:

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

Sapete se la lunghezza massima corrispondente al campo include le virgole? – khalid13

+2

sì, include in quanto è una stringa. –

6

mi è capitato di aver affrontato CommaSeparatedIntegerField nel mio ultimo progetto. Stavo usando MySQL e sembrava che fornire una stringa di valori interi separati da virgole fosse molto adatto ai DB, ad es. '1,2,3,4,5'. Se vuoi lasciarlo in bianco, passa una stringa vuota.

Funziona come un CharField, e beaved in un modo strano per me .. Ho finito con valori come "[1, 2, 3, 4, 5]" comprese le parentesi nel mio database! Quindi attenzione!

0

Opere per le versioni maggiori di Django 1,9

Primo passo: -importare questo (potrebbe cambiare in versioni più recenti, in modo da controllare due volte che)

from django.core.validators import validate_comma_separated_integer_list 

Seconda Passaggio: -Scrivi campo

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 

Nota: Assicurati di utilizzare default = '' se si aggiunge colonna a un database già creato altrimenti si otterrebbe la seguente opzione di scegliere dopo l'esecuzione 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: 

Felice Coding !

Problemi correlati