lib.itmens/catalog/forms.py
2024-04-03 23:34:19 -04:00

59 lines
1.7 KiB
Python

from django import forms
from django.utils.translation import gettext_lazy as _
from catalog.models import *
from common.forms import PreviewImageInput
CatalogForms = {}
def _EditForm(item_model):
item_fields = (
["id"]
+ item_model.METADATA_COPY_LIST
+ ["cover"]
+ ["primary_lookup_id_type", "primary_lookup_id_value"]
)
if "media" in item_fields:
# FIXME not sure why this field is always duplicated
item_fields.remove("media")
class EditForm(forms.ModelForm):
id = forms.IntegerField(required=False, widget=forms.HiddenInput())
primary_lookup_id_type = forms.ChoiceField(
required=False,
choices=item_model.lookup_id_type_choices(),
label=_("Primary ID Type"),
help_text="automatically detected, usually no change necessary",
)
primary_lookup_id_value = forms.CharField(
required=False,
label=_("Primary ID Value"),
help_text="automatically detected, usually no change necessary, left empty if unsure",
)
class Meta:
model = item_model
fields = item_fields
widgets = {
"cover": PreviewImageInput(),
}
def clean(self):
data = super().clean() or {}
t, v = self.Meta.model.lookup_id_cleanup(
data.get("primary_lookup_id_type"), data.get("primary_lookup_id_value")
)
data["primary_lookup_id_type"] = t
data["primary_lookup_id_value"] = v
return data
return EditForm
def init_forms():
for cls in Item.__subclasses__():
CatalogForms[cls.__name__] = _EditForm(cls)
init_forms()