2009-08-26 45 views

Trả lời

71

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.

+0

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

+0

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

14

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.

+2

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

+0

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

6

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.

+6

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

-1

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

1

form = YourForm(initial = {'field1': instance_of_mymodel.pk }) 

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.

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