Tạo bộ truy vấn trống theo mặc định trong các trường mẫu django


168

Tôi có các lĩnh vực này trong mẫu:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())

huyện đến từ nhấp vào thành phố và khu vực đến từ nhấp chuột vào khu vực. Với queryset=MyDistrict.objects.all()queryset=MyArea.objects.all()hình thức sẽ rất nặng nề. Làm thế nào tôi có thể làm cho các truy vấn trống theo mặc định?


chỉnh sửa đề xuất của tôi cải thiện bài viết. Nói chung, không có bài đăng nào nên kết thúc bằng "cảm ơn". Nó không phải là cá nhân, nụ. meta.stackexchange.com/questions/17878/...
Telarian

Câu trả lời:


421

Bạn có thể có một bộ truy vấn trống bằng cách thực hiện điều này:

MyModel.objects.none()

Mặc dù tôi không biết bạn sẽ sử dụng biểu mẫu đó như thế nào, bạn có thể đặt nó làm bộ truy vấn của trường để có được thứ bạn cần ...

Bạn có thể tìm thêm thông tin ở đây


4
Trong trường hợp sử dụng mà bộ truy vấn của bạn thay đổi trong chế độ xem của bạn dựa trên các tham số url. Sau đó, trong chế độ xem của bạn, bạn đặt bộ truy vấn chính xác như vậy: edit_form.fields ["nội dung"]. Queryset = Asset.objects.filter (location_id = location_id)
radtek

Điều gì xảy ra nếu tôi không có một mô hình, tôi chỉ đang làm một values_list('something', flat=True)?
Boris

2

Nhận xét của @ radtek nên là một câu trả lời vì nó hữu ích trong các tình huống tương tự nhưng với cách tiếp cận khác với câu trả lời được chấp nhận.

Nếu bộ truy vấn của bạn thay đổi với url trong chế độ xem của bạn.

Tôi đang mở rộng câu trả lời với ví dụ như tôi đã sử dụng:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.