2009-03-08 29 views
9

Tôi đang làm việc trên một ứng dụng Django. Một trong các mô hình của tôi, "Người dùng", bao gồm trường "giới tính", như được xác định bên dưới:Làm cách nào để tạo một mục menu Django ModelForm được chọn theo mặc định?

GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True) 

Tôi đang sử dụng ModelForm để tạo biểu mẫu HTML "người dùng mới". Google-fu của tôi dường như không làm tôi - làm thế nào tôi có thể tạo biểu mẫu HTML này có mục "Nam" được chọn theo mặc định trong hộp thả xuống? (ví dụ: selected="selected" cho mặt hàng này.)

Trả lời

15

Nếu bạn cần một hình thức trống với một giá trị mặc định được chọn, sau đó vượt qua một cuốn từ điển 'đầu tiên' để các nhà xây dựng hình thức mô hình của bạn bằng cách sử dụng tên của lĩnh vực của bạn là chìa khóa:

form = MyModelForm (initial={'gender':'M'}) 

-OR-

Bạn có thể ghi đè các thuộc tính nhất định của ModelForm bằng cách sử dụng tính chất khai báo của API biểu mẫu. Tuy nhiên, điều này có lẽ là một chút cồng kềnh cho trường hợp sử dụng này và tôi đề cập đến nó chỉ để cho bạn thấy rằng bạn có thể làm điều đó. Bạn có thể tìm thấy các ứng dụng khác cho điều này trong tương lai.

class MyModelForm (forms.ModelForm): 
    gender = forms.ChoiceField (choices=..., initial='M', ...) 
    class Meta: 
     model=MyModel 

-HOẶC-

Nếu bạn muốn có một ModelForm đó là ràng buộc để một trường hợp đặc biệt của mô hình của bạn, bạn có thể vượt qua một 'dụ' của mô hình của bạn gây Django để kéo giá trị được lựa chọn từ đó mô hình.

form = MyModelForm (instance=someinst) 
+0

Tôi thực sự chỉ phát hiện ra rằng đi qua một trường hợp của mô hình như bạn đã làm trong câu trả lời của bạn không làm cho Django hiển thị giá trị được chọn trong HTML. Nó hoạt động cho các trường nhập văn bản tốt, nhưng tôi cũng cần nó cho đầu vào được chọn. Bất kỳ ý tưởng làm thế nào để có được xung quanh này? – GChorn

+0

@GChorn Nó cũng có tác dụng đối với các trường được chọn để có thể có thứ gì đó khác. Tôi khuyên bạn nên tạo một câu hỏi mới và đăng mã có liên quan để bạn có thể thu hút nhiều người hơn. –

+0

Xin chào Joe, cảm ơn bạn đã trả lời, vâng tôi thực sự đã làm điều này ngày hôm qua nhưng chưa có câu trả lời nào: http://stackoverflow.com/q/16056045/1256700 – GChorn

7

Chắc chắn default sẽ thực hiện thủ thuật?

ví dụ:

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
+0

+1; điều đó cũng hiệu quả; cảm ơn. – RexE

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