2009-12-17 28 views
5

Có thể đặt truy vấn của trường ForeignKey của biểu mẫu sao cho nó sẽ lấy riêng bộ truy vấn và xuất chúng trong <optgroup> không?Sử dụng <optgroup> với form.fields.queryset?

Dưới đây là những gì tôi có:

views.py

form = TemplateFormBasic(initial={'template': digest.template.id}) 
form.fields['template'].queryset = Template.objects.filter(Q(default=1) | Q(user=request.user)).order_by('name') 

Trong mô hình mẫu của tôi, tôi có Templates mặc định và các mẫu người dùng tạo ra. Tôi muốn chúng được tách biệt rõ ràng trong hộp <select> ví dụ.

<select> 
    <optgroup label="Default Templates"> 
    <option>Default 1</option> 
    <option>Default 2</option> 
    </optgroup> 
    <optgroup label="User Templates"> 
    <option>User Template 1</option> 
    <option>User Template 2</option> 
    </optgroup> 
</select> 

Việc này có thể thực hiện được không?

Trả lời

10

tôi đã có thể hình dung nó ra bằng cách sử dụng ví dụ đưa ra trên this blog

views.py

form.fields['template'].choices = templates_as_choices(request) 

def templates_as_choices(request): 
    templates = [] 
    default = [] 
    user = [] 
    for template in Template.objects.filter(default=1).order_by('name'): 
     default.append([template.id, template.name]) 

    for template in Template.objects.filter(user=request.user).order_by('name'): 
     user.append([template.id, template.name]) 

    templates.append(['Default Templates', default]) 
    templates.append(['User Templates', user]) 

    return templates 
+0

Nice! Chính xác những gì Tiến sĩ đặt hàng! Tôi đã tìm kiếm một cách để thao tác form.fields ['field']. Queryset vào một cái gì đó tùy chỉnh và .choices hoàn toàn trượt tâm trí của tôi. Tuyệt quá! – radtek

4

Tôi đã thực hiện trong quá khứ bằng cách không sử dụng khóa ngoại trên biểu mẫu, nhưng thay vì là charfield with choices.

Một CharField với các nhóm hỗ trợ lựa chọn hỗ trợ. Bạn cần có các lựa chọn ở định dạng này:

('Nhóm 1', ('1', 'Yada'), ('2', 'Yada')))), ('Nhóm 2' , (('3', 'Bepety'), ('4', 'Bopity')))

Lựa chọn cũng có thể gọi được. Vì vậy, tôi tạo ra chức năng của riêng tôi mà đi qua các mô hình và xây dựng một tuple như trên.

+0

Cảm ơn .. Đây là những gì tôi đang tìm kiếm .. –

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