Menampilkan formulir radio kisi dengan Django Forms atau Django Floppyforms

Saya ingin membuat formulir dengan grid seperti ini:

Pertanyaan kisi

Tahukah Anda bagaimana saya bisa melakukan ini? Apakah ada widget Django Form untuk itu?

Sebenarnya ini adalah pertanyaan dengan daftar pilihan yang sama yang ditampilkan sebagai radio dalam kotak.

Terima kasih,

Natim


person Natim    schedule 04.01.2012    source sumber
comment
Dalam hal ini saya tidak akan ragu untuk menggunakan html murni, dan hanya {% if form.data.email == 'daily' %}checked=checked{% endif %} di tag input radio. CIUMAN sepanjang jalan.   -  person jpic    schedule 04.01.2012
comment
Jadi, Anda akan membuat tag templat penyertaan dengan header (pilihan) dan bidang sebagai parameter?   -  person Natim    schedule 04.01.2012
comment
Untuk grid pertama saya akan melakukan hardcode di templat formulir itu sudah pasti. Untuk grid kedua: include templatetag terdengar seperti ide yang bagus (mengapa tidak menggunakan Django-native-tags). Mengenai argumen, satu hal yang pasti: Anda memerlukan bidang pilihan (untuk membuat baris) tetapi Anda dapat menyimpulkan pilihan (untuk membuat kolom) dari bidang (bidang.pilihan). Jadi sepertinya tanda tangan seperti itu akan berfungsi {% my_inc_tag form 'email,newsletter,etc...' %}. Tentu saja fungsi penyertaan harus menyiapkan konteks yang dibutuhkan oleh template yang disertakan. Memang tidak mudah, tapi mungkin saja terjadi.   -  person jpic    schedule 04.01.2012


Jawaban (2)


Saya akan melakukan ini dengan formulir Django dengan satu bidang per baris di grid Anda, dengan ChoiceField dan RadioSelect sebagai widget:

line1 = forms.ChoiceField(widget=forms.RadioSelect, choices=TRUC)
line2 = …

Maka Anda perlu menemukan tata letak template untuk merendernya dengan benar. RadioSelect menghasilkan <ul> dengan pilihan masing-masing menjadi <li>. Label pilihan disertakan dalam <li>, dan ini bukan yang Anda inginkan di sini.

Dengan floppyforms Anda dapat membuat subkelas RadioSelect dan memberinya nama_templat khusus (lihat templat floppyforms/radio.html) untuk menghilangkan labelnya. Anda juga dapat mengubahnya untuk merender, misalnya, sel tabel (<td>s) alih-alih <li>, dan membuat markup formulir Anda menghasilkan tabel dengan label di header tabel.

import floppyforms as forms

class RadioSelect(forms.RadioSelect):
    template_name = 'myforms/radio.html'

Letakkan markup baris yang Anda inginkan pada templat di atas.

Lalu, di templat yang merender formulir Anda:

<form method="post" action="youraction">
  <table>
    <thead>
      <td> <!-- put your form headers here --> </td>
    </thead>
    <tbody>
      {% for field in form %}
        <tr>
          <td>{{ field.label_tag }}</td>
          {{ field }}
        </tr>
      {% endfor %}
    </tbody>
  </table>
<!-- submit button -->
</form>

Maka tinggal menerapkan beberapa gaya CSS untuk mendapatkan tata letak yang Anda butuhkan :)

person brutasse    schedule 04.01.2012

Anda dapat mencoba bidang ini django-radiogrid

person Anton Shurashov    schedule 26.07.2015