Tôi đang sử dụng một cái gì đó như thế này:Django, ModelChoiceField() và giá trị ban đầu
field1 = forms.ModelChoiceField(queryset=...)
Làm thế nào tôi có thể làm cho hình thức của tôi hiển thị một giá trị như đã chọn?
Tôi đang sử dụng một cái gì đó như thế này:Django, ModelChoiceField() và giá trị ban đầu
field1 = forms.ModelChoiceField(queryset=...)
Làm thế nào tôi có thể làm cho hình thức của tôi hiển thị một giá trị như đã chọn?
Nếu bạn muốn đặt giá trị ban đầu mặc định, bạn phải xác định initial
như các trường biểu mẫu khác ngoại trừ bạn set it to the id instead.
Giả sử bạn đã có field1
như thế này:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all())
thì bạn cần phải thiết lập ban đầu khi bạn tạo biểu mẫu như thế này:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
hơn:
form = YourForm(initial = {'field1': instance_of_mymodel })
Tôi cũng giả sử bạn đã xác định __unicode__
cho các kiểu máy của bạn để điều này đặt chính xác.
Bạn chỉ có thể sử dụng
field1 = forms.ModelChoiceField(queryset=..., initial=0)
để làm cho giá trị đầu tiên được chọn vv Đó là cách chung chung hơn, thì câu trả lời khác.
Phiên bản nào của Django thực hiện công việc này?Nó không có vẻ làm việc cho tôi trong phiên bản 1.8. – BudgieInWA
Tôi đã xác minh từ [mã nguồn] (https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130) và tự mình thử nghiệm rằng điều này đang hoạt động cho 'django> = 1,8'. Tôi tin rằng điều này sẽ làm việc cho tất cả các phiên bản bao gồm '> = 1.4' – Yeo
Giờ họ đã thay đổi: giá trị ban đầu
Giá trị mặc định bây giờ có thể được thiết lập bằng cách định nghĩa initial
như lĩnh vực hình thức khác ngoại trừ bạn đặt nó là id thay.
Bây giờ điều này sẽ đủ:
form = YourForm(initial = {'field1': instance_of_mymodel })
Mặc dù cả hai vẫn làm việc.
Vui lòng chỉ định phiên bản nào của Django bạn đang chạy bây giờ là" thời gian đã thay đổi ". Thay đổi cho một số ra có thể nâng cấp lên 1,2 ... – scoopseven
Bạn có thể làm điều này cũng như:
form = YourForm(initial = {'field1': pk })
nếu bạn đang phân tích các khóa chính của bạn thông qua một chuỗi truy vấn hoặc thông qua một cuộc gọi ajax không cần một ví dụ, các thiết lập truy vấn đã xử lý mà cho thả của bạn xuống, các chỉ số pk bang mà bạn muốn
mã
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
và
form = YourForm(initial = {'field1': instance_of_mymodel })
hoặc đầu lĩnh vực trực tiếp sau đây:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
Tất cả công việc.
Hai cách đầu tiên sẽ ghi đè cách cuối cùng.
Không biết phiên bản là gì tại thời điểm viết bài này, nhưng câu hỏi này hiện đã lỗi thời một chút. Trong Django 1.5, bằng văn bản, cả hai phương pháp này sẽ hoạt động. – JcKelley
bất kỳ ý tưởng nào tại sao tôi nhận được '__init __() có một đối số từ khóa không mong muốn field1' – dashesy