Tweaked forms for prepopulated read-only slot fields
This commit is contained in:
parent
4e7b0207d6
commit
c5d690d7f9
|
@ -3,14 +3,22 @@ from django.contrib import admin
|
|||
from taggit_helpers.admin import TaggitListFilter, TaggitTabularInline
|
||||
|
||||
from roms.models import Rom, RomFile
|
||||
|
||||
from roms.forms import RomFileForm, RomFileInlineFormSet
|
||||
from gulashromstore.settings import SLOT_COUNT
|
||||
|
||||
|
||||
class RomFileInline(admin.TabularInline):
|
||||
model = RomFile
|
||||
form = RomFileForm
|
||||
formset = RomFileInlineFormSet
|
||||
|
||||
fields = ('slot', 'binary')
|
||||
|
||||
can_delete = False
|
||||
max_num = SLOT_COUNT
|
||||
min_num = SLOT_COUNT
|
||||
|
||||
|
||||
class RomAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'approved', 'tag_list')
|
||||
list_filter = [TaggitListFilter]
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
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
|
|
@ -38,6 +38,9 @@ class Rom(models.Model):
|
|||
|
||||
return json
|
||||
|
||||
def __str__(self):
|
||||
return "Rom %s" % self.name
|
||||
|
||||
|
||||
|
||||
class RomFile(models.Model):
|
||||
|
@ -48,3 +51,6 @@ class RomFile(models.Model):
|
|||
|
||||
class Meta:
|
||||
unique_together = ('rom', 'slot')
|
||||
|
||||
def __str__(self):
|
||||
return "RomFile %s %d" % (self.rom.name, self.slot)
|
||||
|
|
Loading…
Reference in New Issue