2009-07-30 30 views

Trả lời

21

Nhìn vào nguồn cho 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) 

Kiểm tra ra rằng validator regex. Hình như miễn là bạn cung cấp cho nó một danh sách các số nguyên và dấu phẩy, django sẽ không phàn nàn.

Bạn có thể định nghĩa nó giống như một charfield cơ bản:

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

Và cư nó như thế này:

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

Bạn có biết liệu max_length tương ứng với trường có dấu phẩy không? – khalid13

+2

có, nó bao gồm vì nó là một chuỗi. –

6

Tôi chỉ tình cờ đã bị xử lý CommaSeparatedIntegerField trong dự án mới nhất của tôi. Tôi đã sử dụng MySQL và dường như việc cung cấp một chuỗi các giá trị số nguyên được tách nhau bằng dấu phẩy là rất thân thiện với DB, ví dụ: '1,2,3,4,5'. Nếu bạn muốn để trống, chỉ cần truyền một chuỗi rỗng.

Nó hoạt động như một CharField, và beaved một cách kỳ lạ đối với tôi .. Tôi đã kết thúc với các giá trị như "[1, 2, 3, 4, 5]" bao gồm các dấu ngoặc trong cơ sở dữ liệu của tôi! Vì vậy hãy quan sát!

2

Tôi muốn thêm rằng trường này is depricated in Django 1.9. Trong Django 1.9+ một CharField với validators=[validate_comma_separated_integer_list] nên được sử dụng.

0

trình cho các phiên bản lớn hơn Django 1,9

Bước đầu tiên: -nhập khẩu (Có thể thay đổi trong các phiên bản mới hơn, kiểm tra để gấp đôi) này

from django.core.validators import validate_comma_separated_integer_list 

Second Bước: -Viết trường

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 

Lưu ý: Hãy chắc chắn để sử dụng default = '' nếu bạn đang thêm cột vào một cơ sở dữ liệu đã được tạo ra nếu không bạn sẽ nhận được các tùy chọn sau đây để lựa chọn sau khi chạy 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: 

Chúc mừng Mã hóa !

Các vấn đề liên quan