2009-07-30 13 views

Respuesta

21

En cuanto a la fuente de 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) 

Comprobar que validador de expresiones regulares. Parece que siempre que le proporcione una lista de números enteros y comas, django no se quejará.

Se puede definir simplemente como un Charfield básicamente:

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

y poblar esta manera:

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

¿Sabe si el max_length correspondiente al campo incluye comas? – khalid13

+2

sí, incluye como es una cadena. –

6

ocurrió que se han ocupado de CommaSeparatedIntegerField en mi último proyecto. Estaba usando MySQL y parecía que el suministro de una serie de valores enteros separados por comas es muy compatible con DB, por ejemplo. '1,2,3,4,5'. Si desea dejarlo en blanco, simplemente pase una cadena vacía.

Actúa como un CharField, y beaved de una manera extraña para mí ... Terminé con valores como "[1, 2, 3, 4, 5]" ¡incluyendo los corchetes en mi base de datos! ¡Así que ten cuidado!

0

Obras para versiones superiores a Django 1,9

Primer paso: -Importe este (puede cambiar en versiones más recientes, por lo que vuelve a comprobar que)

from django.core.validators import validate_comma_separated_integer_list 

Segundo Paso: -Campo de escritura

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: Por favor asegúrese de usar default = '' si va a agregar columna a una base de datos ya creada otra forma podrías tener la siguiente opción de elegir después de ejecutar 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: 

feliz Codificación !

Cuestiones relacionadas