2010-12-23 29 views
7

Tôi có mẫu Django sử dụng số choicesattribute.Làm cách nào để thay đổi các lựa chọn trong mô hình Django?

COLOR_CHOICES = (
    ('R', 'Red'), 
    ('B', 'Blue'), 
) 
class Toy(models.Model): 
    color = models.CharField(max_length=1, choices=COLOR_CHOICES) 

Mã của tôi đang được sản xuất và bây giờ tôi muốn thêm các lựa chọn bổ sung.

COLOR_CHOICES = (
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
) 

Tôi làm cách nào để thực hiện việc này? Django có sử dụng các ràng buộc cơ sở dữ liệu để thực thi các lựa chọn không? Tôi có cần thực hiện chuyển đổi Cơ sở dữ liệu (Tôi đang sử dụng South) không? Hoặc Django chỉ thực thi các hạn chế lựa chọn trong mã Python và tất cả những gì tôi phải làm là thay đổi mã và khởi động lại?

Cảm ơn!

Trả lời

11

Django không thực thi các lựa chọn ở cấp cơ sở dữ liệu, nó chỉ sử dụng chúng để trình bày các tiện ích và trong quá trình xác nhận. Nếu bạn muốn cho họ một chút 'năng động', ví dụ có những người khác nhau trên các máy chủ khác nhau mà bạn có thể xác định chúng qua settings.py:

from django.conf import settings 

COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
)) 

Sau đó, bạn có thể xác định sự lựa chọn khác nhau trong settings.py (không cần bạn cho bất kỳ di cư cơ sở dữ liệu !).

+0

Đó là một ý tưởng hay. Nhưng bạn đang nói rằng vì nó không cần di chuyển DB. Tôi chỉ cần thay đổi mã và khởi động lại? – Adam

+0

vâng ... và bên cạnh đó không nên là vấn đề lớn để thử nó, phải không? –

+0

Không phải là vấn đề lớn. Nó đã làm việc! Cảm ơn! – Adam

1

Trường là models.CharField nên cơ sở dữ liệu sẽ đối xử với nó như bất kỳ models.CharField khác được thành lập trong django :)

Không, nó không thực thi những lựa chọn/bạn không cần phải chạm vào DB của bạn.

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