예제 #1
0
 def _get_display_input_field(cls, field_name: str) -> Field:
     fields_map = cls.model._meta.fields_map
     field = fields_map.get(field_name)
     if not field:
         raise NoSuchFieldFound(
             f"Can't found field '{field_name}' in model {cls.model}")
     label = field_name
     null = field.null
     placeholder = field.description or ""
     display, input_ = displays.Display(), inputs.Input(
         placeholder=placeholder, null=null, default=field.default)
     if field.pk or field.generated:
         display, input_ = displays.Display(), inputs.DisplayOnly()
     elif isinstance(field, BooleanField):
         display, input_ = displays.Boolean(), inputs.Switch(
             null=null, default=field.default)
     elif isinstance(field, DatetimeField):
         if field.auto_now or field.auto_now_add:
             input_ = inputs.DisplayOnly()
         else:
             input_ = inputs.DateTime(null=null, default=field.default)
         display, input_ = displays.DatetimeDisplay(), input_
     elif isinstance(field, DateField):
         display, input_ = displays.DateDisplay(), inputs.Date(
             null=null, default=field.default)
     elif isinstance(field, IntEnumFieldInstance):
         display, input_ = displays.Display(), inputs.Enum(
             field.enum_type, null=null, default=field.default)
     elif isinstance(field, CharEnumFieldInstance):
         display, input_ = displays.Display(), inputs.Enum(
             field.enum_type,
             enum_type=str,
             null=null,
             default=field.default)
     elif isinstance(field, JSONField):
         display, input_ = displays.Json(), inputs.Json(null=null)
     elif isinstance(field, TextField):
         display, input_ = displays.Display(), inputs.TextArea(
             placeholder=placeholder, null=null, default=field.default)
     elif isinstance(field, IntField):
         display, input_ = displays.Display(), inputs.Number(
             placeholder=placeholder, null=null, default=field.default)
     elif isinstance(field, ForeignKeyFieldInstance):
         display, input_ = displays.Display(), inputs.ForeignKey(
             field.related_model, null=null, default=field.default)
         field_name = field.source_field
     elif isinstance(field, ManyToManyFieldInstance):
         display, input_ = displays.InputOnly(), inputs.ManyToMany(
             field.related_model)
     return Field(name=field_name,
                  label=label.title(),
                  display=display,
                  input_=input_)
예제 #2
0
 def __init__(
     self,
     name: str,
     label: str,
     display: Optional[displays.Display] = None,
     input_: Optional[Widget] = None,
 ):
     self.name = name
     self.label = label
     if not display:
         display = displays.Display()
     display.context.update(label=label)
     self.display = display
     if not input_:
         input_ = inputs.Input()
     input_.context.update(label=label, name=name)
     self.input = input_