How to Change Queryset on Django Formset

  • Posted on: 30 April 2017
  • By: oon
Django Formset is collection of Form

Saya sudah sering menggunakan Django Form, tapi kali ini mau mencoba menggunakan Django Formset [1].

A formset is a layer of abstraction to work with multiple forms on the same page.

Satu hal yang sudah terbayang adalah formset merupakan kumpulan dari sejumlah form.

Selanjutnya, saya terbiasa menggunakan modelform_factory untuk secara otomatis membuat Form dari Model, sehingga tidak perlu lagi repot secara manual mendeklarasikan form.

Dan seperti yang diperkirakan untuk formset juga ada modelformset_factory, jadi secara otomatis membuat Formset dari Model.

Beres dengan proses generate Form dan Formset, biasa saya menggunakan custom queryset, sehingga form saya tidak perlu menampilkan (pilihan) data yang tidak diperlukan. Bagaimana melakukan pengubahan queryset di Formset? Jika menggunakan mekanisme yang dengan mengakses fields seperti halnya di Form, ternyata tidak bisa.

Jawabannya, dengan kembali ke definisi awal tentang Formset yang merupakan kumpulan dari Form, sehingga lakukan saja iterasi dari Formset untuk mendapatkan semua form di dalamnya, lalu ubah queryset dari masing-masing form.

The formset gives you the ability to iterate over the forms in the formset and display them as you would with a regular form

>>> for form in formset:
        form.fields['your_field'].queryset = YourModel.objects.filter(some=thing)

Alur yang dibuat di framework Django sudah seragam dan sangat memudahkan development web :)

[1]https://docs.djangoproject.com/en/1.11/topics/forms/formsets/

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.