สร้างชุดแบบสอบถามว่างเปล่าโดยค่าเริ่มต้นในเขตข้อมูลแบบฟอร์ม django


169

ฉันมีสาขานี้ในรูปแบบ:

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())

อำเภอมาจากการคลิกที่เมืองและพื้นที่มาจากการคลิกที่พื้นที่ กับ queryset=MyDistrict.objects.all()และqueryset=MyArea.objects.all()รูปแบบจะหนักมาก ฉันจะทำให้ชุดข้อความค้นหาว่างเปล่าเป็นค่าเริ่มต้นได้อย่างไร


การแก้ไขที่แนะนำของฉันปรับปรุงการโพสต์ โดยทั่วไปโพสต์ไม่ควรลงท้ายด้วย "ขอบคุณ" มันไม่ใช่เรื่องส่วนตัว meta.stackexchange.com/questions/17878/…
Telarian

คำตอบ:


422

คุณสามารถมีชุดข้อความค้นหาว่างได้โดยทำสิ่งนี้:

MyModel.objects.none()

แม้ว่าฉันจะไม่รู้ว่าคุณจะใช้ฟอร์มนั้นอย่างไร แต่คุณสามารถใช้ชุดข้อมูลนั้นเป็นชุดข้อมูลของเขตข้อมูลเพื่อให้ได้สิ่งที่คุณต้องการ ...

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่


4
ในกรณีการใช้งานที่ชุดแบบสอบถามของคุณเปลี่ยนในมุมมองของคุณตามพารามิเตอร์ url จากนั้นในมุมมองของคุณคุณตั้งค่าชุดการสืบค้นที่ถูกต้องดังนี้: edit_form.fields ["asset"] queryset = Asset.objects.filter (location_id = location_id)
radtek

ถ้าฉันไม่มีแบบจำลองฉันจะทำvalues_list('something', flat=True)อะไร
Boris

2

ความคิดเห็นของ @ radtek ควรเป็นคำตอบเนื่องจากมีประโยชน์ในสถานการณ์ที่คล้ายกัน แต่มีวิธีการที่แตกต่างจากคำตอบที่ยอมรับ

หากชุดแบบสอบถามของคุณเปลี่ยนแปลงด้วย URL ในมุมมองของคุณ

ฉันกำลังขยายคำตอบด้วยตัวอย่างเมื่อฉันใช้:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.