2011-01-25 28 views
15

Tôi có một hình thức trong forms.py của tôi trông như thế này:dụng nhất một hình thức django với dữ liệu từ cơ sở dữ liệu theo quan điểm

from django import forms 

class ItemList(forms.Form): 
    item_list = forms.ChoiceField() 

tôi cần phải cư trú trong item_list với một số dữ liệu từ cơ sở dữ liệu. Khi được tạo trong HTML item_list phải có dạng như sau:

<select title="ItemList"> 
    <option value="1">Select Item 1</option> 
    <option value="2">Select Item 2</option> 
</select> 

Giá trị tùy chọn trong câu lệnh chọn của tôi sẽ thay đổi hầu như do biến trong truy vấn thường thay đổi tạo ra kết quả mới.

Tôi cần đặt gì trong view.py và cũng trong các tệp mẫu của mình để điền danh mục ItemList với các giá trị từ cơ sở dữ liệu?

Trả lời

25

Hãy xem ví dụ này trong tài liệu Django:

Về cơ bản, bạn có thể sử dụng đối số queryset từ khóa trên một đối tượng Field, để lấy hàng từ cơ sở dữ liệu của bạn:

class BookForm(forms.Form): 
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) 

Cập nhật

Nếu bạn cần một lĩnh vực mô hình lựa chọn năng động, bạn có thể bàn giao id mục của bạn trong constructor của form và điều chỉnh phù hợp queryset:

class ItemForm(forms.Form): 

    # here we use a dummy `queryset`, because ModelChoiceField 
    # requires some queryset 
    item_field = forms.ModelChoiceField(queryset=Item.objects.none()) 

    def __init__(self, item_id): 
     super(ItemForm, self).__init__() 
     self.fields['item_field'].queryset = Item.objects.filter(id=item_id) 

T.B. Tôi đã không thử nghiệm mã này và tôi không chắc chắn về thiết lập chính xác của bạn, nhưng tôi hy vọng ý tưởng chính đi qua.

Resources:

+0

Vấn đề là tất cả các logic của tôi xảy ra trong view.py không có trong forms.py. Bộ truy vấn trông giống như Items.objects.filter (item_id = id) này hơn. Biến "id" được tạo trong view.py. – avatar

+0

nếu bạn thêm thông số khác vào hàm tạo sách thì sao? – amcashcow

+0

@itgorilla: Đã cập nhật bài đăng của tôi. – miku

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