แสดงแบบฟอร์มวิทยุกริดด้วย Django Forms หรือ Django Floppyforms

ฉันต้องการสร้างแบบฟอร์มด้วยตารางประเภทนี้:

คำถามกริด

คุณรู้ไหมว่าฉันสามารถทำเช่นนี้ได้อย่างไร? มีวิดเจ็ต Django Form สำหรับสิ่งนั้นหรือไม่

จริงๆ แล้วมันเป็นคำถามที่มีรายการตัวเลือกเดียวกันแสดงเป็นวิทยุในตาราง

ขอบคุณ,

นาทิม


person Natim    schedule 04.01.2012    source แหล่งที่มา
comment
ในกรณีนั้น ฉันจะไม่ลังเลที่จะใช้ html ล้วนๆ และเพียง {% if form.data.email == 'daily' %}checked=checked{% endif %} ในแท็กอินพุตวิทยุ จูบตลอดทาง   -  person jpic    schedule 04.01.2012
comment
ดังนั้นคุณจะสร้างรวม templatetag โดยมีส่วนหัว (ตัวเลือก) และฟิลด์เป็นพารามิเตอร์ ?   -  person Natim    schedule 04.01.2012
comment
สำหรับตารางแรก ฉันจะฮาร์ดโค้ดในเทมเพลตฟอร์มที่แน่นอน สำหรับตารางที่สอง: การ include templatetag ฟังดูเหมือนเป็นแนวคิดที่ดี (ทำไมไม่ใช้ django-native-tags) สำหรับการโต้แย้ง มีสิ่งหนึ่งที่แน่นอน: คุณต้องมีช่องตัวเลือก (เพื่อสร้างแถว) แต่คุณสามารถอนุมานตัวเลือกได้ (เพื่อสร้างคอลัมน์) จากช่อง (field.choices) ดูเหมือนว่าลายเซ็นดังกล่าวจะใช้งานได้ {% my_inc_tag form 'email,newsletter,etc...' %} แน่นอนว่าฟังก์ชันการรวมจะต้องเตรียมบริบทที่จำเป็นสำหรับเทมเพลตที่รวมไว้ มันไม่ตรงไปตรงมาแต่ก็เป็นไปได้   -  person jpic    schedule 04.01.2012


คำตอบ (2)


ฉันจะทำสิ่งนี้ด้วยแบบฟอร์ม django โดยมีหนึ่งฟิลด์ต่อบรรทัดบนกริดของคุณ โดยมี ChoiceField และ RadioSelect เป็นวิดเจ็ต:

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

จากนั้นคุณจะต้องค้นหาเค้าโครงเทมเพลตเพื่อแสดงผลอย่างถูกต้อง RadioSelect สร้าง <ul> โดยตัวเลือก eahc เป็น <li> ป้ายกำกับตัวเลือกจะรวมอยู่ใน <li> ซึ่งไม่ใช่สิ่งที่คุณต้องการที่นี่

ด้วยฟล็อปปี้ฟอร์ม คุณสามารถซับคลาส RadioSelect และตั้งชื่อ cutom template_name (ดูที่เทมเพลต floppyforms/radio.html) เพื่อละเว้นป้ายกำกับ คุณยังสามารถแก้ไขให้แสดงผล เช่น เซลล์ตาราง (<td>s) แทน <li> และทำให้มาร์กอัปแบบฟอร์มของคุณสร้างตารางที่มีป้ายกำกับในส่วนหัวของตาราง

import floppyforms as forms

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

ใส่มาร์กอัปแถวที่คุณต้องการในเทมเพลตด้านบน

จากนั้นในเทมเพลตที่แสดงแบบฟอร์มของคุณ:

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

ก็แค่เรื่องของการใช้สไตล์ CSS สองสามสไตล์เพื่อให้ได้เลย์เอาต์ที่คุณต้องการ :)

person brutasse    schedule 04.01.2012

คุณสามารถลองใช้ช่องนี้ django-radiogrid

person Anton Shurashov    schedule 26.07.2015