2011-11-24 39 views
8

Tôi sử dụng quản trị viên django để cập nhật dữ liệu khác nhau trên cơ sở dữ liệu MySQL. Tôi sử dụng quản trị django cơ bản cho việc này. Khi nhập dữ liệu mới, tôi muốn có thể có nó để mọi người chỉ có thể chọn từ một vài tùy chọn để nhập dữ liệu văn bản mới.Django Admin Thả xuống các lựa chọn

Ví dụ: Bảng giữ màu, vì vậy thay vì cho phép người quản trị (cá nhân nhập dữ liệu trong trường hợp của chúng tôi) nhập bất cứ thứ gì vào hộp văn bản, làm cách nào để quản trị django chỉ cung cấp cho họ một số tùy chọn để lựa chọn?

Trả lời

18

này có thể được thực hiện thông qua đối số lĩnh vực mô hình choices

myfield = models.CharField(max_length=256, choices=[('green', 'green'), ('red', 'red')] 

Vấn đề duy nhất với điều này là nếu bạn đã có một giá trị trong cơ sở dữ liệu mà không phù hợp với một trong số này, chỉ có thể mặc django nó đến một trong những lựa chọn.

Nếu đó là vấn đề và bạn muốn giữ nguyên các giá trị đó, tôi có thể ghi đè lên biểu mẫu quản trị và chỉ cung cấp các hoạt động thêm ChoiceField hoặc tự động thêm bất kỳ thứ gì trong DB làm một trong các lựa chọn hợp lệ.

class MyForm(ModelForm): 
    MY_CHOICES = [('green', 'green'), ('red', 'red')] 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     if self.instance.id: 
      CHOICES_INCLUDING_DB_VALUE = [(self.instance.field,)*2] + self.MY_CHOICES 
      self.fields['my_field'] = forms.ChoiceField(
       choices=CHOICES_INCLUDING_DB_VALUE) 


class MyAdmin(admin.ModelAdmin): 
    form = MyForm 
+0

Tôi sử dụng nó với phao: myfield = models.FloatField (options = [('1.0', '1')] và nhận thông báo ("không chọn đúng 1.0") khi sử dụng trình đơn thả xuống trong quản trị viên chỉnh sửa. – Timo

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