2009-07-30 9 views

Répondre

21

Regarder la source 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) 

Vérifiez que regex validateur. On dirait que tant que vous lui donnez une liste d'entiers et de virgules, django ne se plaindra pas.

Vous pouvez le définir comme un Charfield essentiellement:

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

Et remplir comme ceci:

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

Savez-vous si le paramètre max_length correspondant au champ contient des virgules? – khalid13

+2

oui, il comprend comme c'est une chaîne. –

6

Je suis tombé avoir traité CommaSeparatedIntegerField dans mon dernier projet. J'utilisais MySQL et il me semblait que fournir une chaîne de valeurs entières séparées par des virgules était très facile à utiliser. '1,2,3,4,5'. Si vous voulez le laisser vide, passez une chaîne vide.

Il agit comme un CharField, et a fonctionné d'une manière étrange pour moi .. J'ai fini avec des valeurs comme "[1, 2, 3, 4, 5]" y compris les parenthèses dans ma base de données! Alors faites attention!

2

Je voudrais ajouter que ce champ is depricated in Django 1.9. Dans Django 1.9+, un CharField avec validators=[validate_comma_separated_integer_list] doit être utilisé.

0

Works pour les versions supérieures à Django 1,9

Première étape: -Importer cette (peut changer dans les versions plus récentes, donc vérifiez que)

from django.core.validators import validate_comma_separated_integer_list 

deuxième Étape: -Champ d'écriture

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 

Note: S'il vous plaît assurez-vous d'utiliser default = '' si vous ajoutez la colonne à une base de données déjà créée, sinon vous obtiendrez l'option suivante pour choisir après l'exécution 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: 

Bonne programmation !

Questions connexes