2009-07-30 4 views

Antwort

21

an der Quelle der Suche nach 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) 

Check-out, dass regex Validator. Sieht so aus, als ob du ihm eine Liste von ganzen Zahlen und Kommata gibst, Django wird sich nicht beklagen.

Sie können es definieren wie ein Charfield im Grunde:

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

Und es wie folgt füllen:

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

Wissen Sie, ob die dem Feld entsprechende max_length Kommata enthält? – khalid13

+2

ja, es enthält, da es eine Zeichenfolge ist. –

6

Ich bin nur zufällig mit CommaSeparatedIntegerField in meinem neuesten Projekt behandelt zu haben. Ich benutzte MySQL und es schien so, als ob das Liefern einer Folge von durch Komma getrennten ganzzahligen Werten sehr DB-freundlich ist, z. "1,2,3,4,5". Wenn Sie es leer lassen möchten, übergeben Sie einfach eine leere Zeichenfolge.

Es verhält sich wie ein CharField, und auf eine seltsame Art und Weise für mich .. Ich endete mit Werten wie "[1, 2, 3, 4, 5]" einschließlich der Klammern in meiner Datenbank! Also pass auf!

2

Ich möchte hinzufügen, dass dieses Feld is depricated in Django 1.9. In Django 1.9+ sollte ein CharField mit validators=[validate_comma_separated_integer_list] verwendet werden.

0

Works für Versionen größer als Django 1,9

Erster Schritt: -Import dieses (Mai in neueren Versionen ändern, so überprüft, dass)

from django.core.validators import validate_comma_separated_integer_list 

Zweite Schritt: -Feld

schreiben
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 

Hinweis: Bitte stellen Sie sicher, default = '' zu verwenden, wenn Sie Spalte auf eine bereits erstellte Datenbank hinzugefügt werden sonst würden Sie die folgende Option erhalten, nachdem 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: 

Glücklich zu wählen laufen Coding !

Verwandte Themen