2011-11-10 40 views
22

Giả sử tôi có choicefield trong mô hình django của tôi bao gồm nhiều lựa chọn. Bây giờ trong tương lai nếu tôi thay đổi lựa chọn hiện tại (tùy chọn) với một số tên khác (lựa chọn), thì liệu các bản ghi hiện có trong mô hình với lựa chọn đó (tùy chọn) cũng sẽ thay đổi? Hoặc Trong trang quản trị, tôi cần phải đặt tùy chọn mới theo cách thủ công?ChoiceField trong mô hình Django

Tôi làm cách nào để đạt được điều này?

Trả lời

79

ChoiceFields được lưu trữ trong cơ sở dữ liệu như các giá trị, vì vậy để lấy một ví dụ từ the documentation:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

Cơ sở dữ liệu sẽ lưu trữ 'M' và 'F', vì vậy nếu bạn một ngày quyết định đổi tên những như thế này *:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Homme'), 
     ('F', 'Femme'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

Sau đó, bất kỳ nơi nào bạn sử dụng giá trị mở rộng 'Nam' hoặc 'Nữ' giờ sẽ có 'Homme' hoặc 'Femme'.

Nếu bạn muốn thay đổi giá trị (ví dụ 'M' và 'F'), thì bạn sẽ muốn cập nhật cơ sở dữ liệu, vì vậy nếu bạn muốn thay đổi 'M' thành 'H', thì bạn ' d sử dụng update:

Foo.objects.filter(gender = 'M').update(gender = 'H') 

Trừ khi bạn đã có một lý do chính đáng để, tôi muốn tránh làm điều này - vì bạn sẽ cần phải chắc chắn thay đổi của bạn để GENDER_CHOICESupdate truy vấn của bạn được thực hiện cùng một lúc.

* Và có, điều này tôi biết đây là cách ngu ngốc để dịch!

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