Sinkler/django-radiogrid

View on GitHub
radiogrid/widgets.py

Summary

Maintainability
A
0 mins
Test Coverage
# -*- coding: utf-8 -*-

from django.forms import MultiWidget, RadioSelect


class RadioRadioSelect(RadioSelect):
    template_name = "radiogrid/radiogrid_input.html"


class RadioGridWidget(MultiWidget):
    input_type = "grid"
    template_name = "radiogrid/radiogrid_widget.html"

    def __init__(self, rows, values, attrs=None):
        self.rows = rows
        self.values = values
        choices = [(k, "") for k, _ in values]
        widgets = [RadioRadioSelect(choices=choices, attrs=attrs) for _ in rows]
        super(RadioGridWidget, self).__init__(widgets, attrs)

    def get_context(self, name, value, attrs):
        context = super(RadioGridWidget, self).get_context(name, value, attrs)
        widgets = context["widget"]["subwidgets"]
        return {
            "rows": [(v[1], widgets[i]) for i, v in enumerate(self.rows)],
            "values": self.values,
            "attrs": self.attrs,
        }

    def decompress(self, value):
        if value:
            return value.split(",")
        return [None for _ in self.rows]