gulasch-r0mstore/roms/forms.py

43 lines
1.3 KiB
Python

from django.forms import Field, Widget, ModelForm
from django.forms.models import BaseInlineFormSet
from roms.models import RomFile
class ReadOnlyWidget(Widget):
def render(self, name, value, attrs):
final_attrs = self.build_attrs(attrs, name=name)
if hasattr(self, 'initial'):
value = self.initial
return "%s" % (value or '')
def _has_changed(self, initial, data):
return False
class ReadOnlyField(Field):
widget = ReadOnlyWidget
def __init__(self, widget=None, label=None, initial=None, help_text=None):
super(ReadOnlyField, self).__init__(self, label=label, initial=initial,
help_text=help_text, widget=widget)
def clean(self, value, initial):
self.widget.initial = initial
return initial
class RomFileForm(ModelForm):
slot = ReadOnlyField()
class Meta:
model = RomFile
fields = ['binary']
class RomFileInlineFormSet(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
super(RomFileInlineFormSet, self).__init__(*args, **kwargs)
# Check that the data doesn't already exist
if not kwargs['instance'].romfile_set.all():
self.initial = [{'slot' : i} for i in range(1, SLOT_COUNT+1)]
self.extra = SLOT_COUNT