Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
lino.core.fields¶
Defines extended database field classes and utility functions related to fields.
Functions
|
Instantiate a |
|
Instantiate a |
|
Return the choices for the given field and the given HTTP request whose holder is either a Model, an Actor or an Action. |
|
Decorator to turn a function into a |
|
|
|
Decorator to turn a method into a |
|
Return a set with the names of the specified fields, checking whether each of them exists. |
|
Decorator shortcut to turn a method into a a |
|
|
|
|
|
Instantiate a ForeignKey or OneToOneField with some subtle differences: |
|
Decorator shortcut to turn a method into a a |
|
|
If the verbose_name of a ForeignKey was not set by user code, Lino sets it to the verbose_name of the model pointed to. |
|
|
|
|
Raise ValidationError if user enters e.g. a date 30.02.2009. |
|
Decorator to turn a model method into a |
|
Yield names to be used as wildcard in the |
Classes
|
An extension of Django's models.CharField. |
|
Deserves more documentation. |
Mixin to create a custom field. |
|
|
A DateField that uses a DatePicker instead of a normal DateWidget. |
|
A simple extension of |
|
A field to be rendered like a normal read-only form field, but with plain HTML instead of an |
|
|
|
Represents a field that doesn't exist in the current configuration but might exist in other configurations. |
|
A field that stores |
|
Base class for |
|
Like |
Mixin for models which have "imported fields". |
|
|
A field that behaves like a DateField, but accepts incomplete dates represented using |
|
A DateField that uses a MonthPicker instead of a normal DateWidget |
|
Stored as plain text in database, but not displayed in user interface. |
|
A field to express a percentage. |
|
|
|
A thin wrapper around Django's DecimalField which adds default values for decimal_places, max_length and max_digits. |
|
|
|
A field that accepts |
|
Deserves more documentation. |
|
A field on a related object. |
|
A |
|
|
|
Base class for everything that can be used as a table row. |
|
Like a TimeField, but allowed values are between |
|
An editable virtual boolean field. |
|
Represents a virtual field. |
|
- lino.core.fields.validate_incomplete_date(value)¶
Raise ValidationError if user enters e.g. a date 30.02.2009.
- lino.core.fields.set_default_verbose_name(f)¶
If the verbose_name of a ForeignKey was not set by user code, Lino sets it to the verbose_name of the model pointed to. This rule holds also for virtual FK fields.
For every FK field defined on a model (including virtual FK fields) this is called during kernel startup. Django sets the verbose_name of every field to
field.name.replace('_', ' ')
.For virtual FK fields defined on an actor or an action it is called a bit later. These fields don’t have a name.
- class lino.core.fields.PasswordField(*args, db_collation=None, **kwargs)¶
Bases:
CharField
Stored as plain text in database, but not displayed in user interface.
- class lino.core.fields.PercentageField(*args, **kwargs)¶
Bases:
DecimalField
A field to express a percentage. The database stores this like a DecimalField. Plain HTML adds a “%”.
- class lino.core.fields.TimeField(verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs)¶
Bases:
TimeField
Like a TimeField, but allowed values are between
calendar_start_hour
andcalendar_end_hour
.
- class lino.core.fields.DatePickerField(verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs)¶
Bases:
DateField
A DateField that uses a DatePicker instead of a normal DateWidget. Doesn’t yet work.
- class lino.core.fields.MonthField(*args, **kw)¶
Bases:
DateField
A DateField that uses a MonthPicker instead of a normal DateWidget
- class lino.core.fields.PriceField(verbose_name=None, max_digits=10, **kwargs)¶
Bases:
DecimalField
A thin wrapper around Django’s DecimalField which adds default values for decimal_places, max_length and max_digits.
- class lino.core.fields.FakeField(**kwargs)¶
Bases:
object
Base class for
RemoteField
andDisplayField
.- wildcard_data_elem = False¶
Whether to consider this field as wildcard data element.
- sortable_by = None¶
A list of names of real fields to be used for sorting when this fake field is selected. For remote fields this is set automatically, on virtual fields you can set it yourself.
- is_enabled(lh)¶
Overridden by mti.EnableChild
- class lino.core.fields.RemoteField(getter, name, fld, setter=None, **kwargs)¶
Bases:
FakeField
A field on a related object.
Remote fields are created by
lino.core.model.Model.get_data_elem()
when needed.- field¶
The bottom-level (leaf) field object.
- value_from_object(obj, ar=None)¶
Return the value of this field in the specified model instance obj. ar may be None, it’s forwarded to the getter method who may decide to return values depending on it.
- class lino.core.fields.DisplayField(verbose_name=None, **kwargs)¶
Bases:
FakeField
A field to be rendered like a normal read-only form field, but with plain HTML instead of an
<input>
tag.This is to be used as the return_type of a
VirtualField
.The value to be represented is either some unicode text, a translatable text or a
HTML element
.
- class lino.core.fields.HtmlBox(verbose_name=None, **kwargs)¶
Bases:
DisplayField
Like
DisplayField
, but to be rendered as a panel rather than as a form field.
- class lino.core.fields.DelayedHtmlBox(*args, **kwargs)¶
Bases:
HtmlBox
A simple extension of
HtmlBox
that uses theDelayedValue
for its related store field value.
- class lino.core.fields.VirtualField(return_type, get=<function return_none>, **kwargs)¶
Bases:
FakeField
Represents a virtual field. Values of virtual fields are not stored in the database, but computed on the fly each time they get read. Django doesn’t see them.
A virtual field must have a return_type, which can be either a Django field type (CharField, TextField, IntegerField, BooleanField, …) or one of Lino’s custom fields
DisplayField
,HtmlBox
orRequestField
.The get must be a callable which takes two arguments: obj the database object and ar an action request.
The
model
of a VirtualField is the class where the field was defined. This can be an abstract model. The VirtualField instance does not have a list of the concrete models which use it (because they inherit from that class).- lino_resolve_type()¶
Called on every virtual field when all models are loaded.
- set_value_in_object(ar, obj, value)¶
Stores the specified value in the specified model instance obj. request may be None.
Note that any implementation must return obj, and callers must be ready to get another instance. This special behaviour is needed to implement
lino.utils.mti.EnableChild
.
- value_from_object(obj, ar=None)¶
Return the value of this field in the specified model instance obj. ar may be None, it’s forwarded to the getter method who may decide to return values depending on it.
- select_format(compiler, sql, params)¶
Custom format for select clauses. For example, GIS columns need to be selected as AsText(table.col) on MySQL as the table.col data can’t be used by Django.
- class lino.core.fields.VirtualBooleanField(ref_attr, label=None, **kw)¶
Bases:
VirtualField
An editable virtual boolean field.
- lino.core.fields.virtualfield(return_type, **kwargs)¶
Decorator to turn a model method into a
VirtualField
.
- lino.core.fields.constant()¶
Decorator to turn a function into a
Constant
. The function must accept one positional argument datasource.
- class lino.core.fields.RequestField(get, *args, **kw)¶
Bases:
VirtualField
A
VirtualField
whose values are table action requests to be rendered as a clickable integer containing the number of rows. Clicking on it will open a window with the table.
- lino.core.fields.displayfield(*args, **kw)¶
Decorator to turn a method into a
VirtualField
of typeDisplayField
.
- lino.core.fields.htmlbox(*args, **kwargs)¶
Decorator shortcut to turn a method into a a
VirtualField
of typeHtmlBox
.
- lino.core.fields.requestfield(*args, **kw)¶
Decorator shortcut to turn a method into a a
VirtualField
of typeRequestField
.
- class lino.core.fields.CharField(*args, **kw)¶
Bases:
CharField
An extension of Django’s models.CharField.
Adds two keywords mask_re and strip_chars_re which, when using the ExtJS front end, will be rendered as the maskRe and stripCharsRe config options of TextField as described in the ExtJS documentation, converting naming conventions as follows:
regex
regex
A JavaScript RegExp object to be tested against the field value during validation (defaults to null). If the test fails, the field will be marked invalid using regexText.
mask_re
maskRe
An input mask regular expression that will be used to filter keystrokes that do not match (defaults to null). The maskRe will not operate on any paste events.
strip_chars_re
stripCharsRe
A JavaScript RegExp object used to strip unwanted content from the value before validation (defaults to null).
Example usage:
belgian_phone_no = dd.CharField(max_length=15, strip_chars_re='')
- class lino.core.fields.QuantityField(*args, **kw)¶
Bases:
CharField
A field that accepts
Quantity
,Percentage
andDuration
values.Implemented as a CharField, which means that sorting or filter ranges may not work as expected, and you cannot use SUM or AVG agregators on quantity fields since the database does not know how to calculate sums from them.
When you set blank=True, then you should also set null=True.
- to_python(value)¶
Excerpt from Django docs:
As a general rule,
to_python()
should deal gracefully with any of the following arguments:An instance of the correct type (e.g., Hand in our ongoing example).
A string (e.g., from a deserializer).
None (if the field allows null=True)
I’d add “Any value allowed for this field when instantiating a model.”
- class lino.core.fields.DurationField(*args, **kw)¶
Bases:
QuantityField
A field that stores
Duration
values as CHAR.
- class lino.core.fields.IncompleteDateField(*args, **kw)¶
Bases:
CharField
A field that behaves like a DateField, but accepts incomplete dates represented using
lino.utils.format_date.IncompleteDate
.
- class lino.core.fields.DummyField(*args, **kw)¶
Bases:
FakeField
Represents a field that doesn’t exist in the current configuration but might exist in other configurations. The “value” of a DummyField is always None.
See e.g.
ForeignKey()
andfields_list()
.
- class lino.core.fields.RecurrenceField(*args, **kw)¶
Bases:
CharField
Deserves more documentation.
- lino.core.fields.OneToOneField(*args, **kwargs)¶
Instantiate a
django.db.models.OneToOneField
usingpointer_factory()
.
- lino.core.fields.ForeignKey(*args, **kwargs)¶
Instantiate a
django.db.models.ForeignKey
usingpointer_factory()
.
- class lino.core.fields.CustomField¶
Bases:
object
Mixin to create a custom field.
It defines a single method
create_layout_elem()
.- create_layout_elem(base_class, layout_handle, field, **kw)¶
Return the widget to represent this field in the specified layout_handle.
The widget must be an instance of the given base_class.
self and field are identical unless self is a
RemoteField
or aVirtualField
.
- class lino.core.fields.TableRow¶
Bases:
object
Base class for everything that can be used as a table row.
- extra_display_modes = None¶
A set of extra display modes to make available on actors that use this model.
If specified, this is the default value for
hidden_columns
of every Table on this model.
- classmethod setup_parameters(params)¶
Inheritable hook for defining parameters for every actor on this model.
Called at site startup once for each actor using this model.
Toes not return anything. Receives a dict object params and is expected to update that dict, which will be used to fill the actor’s
parameters
.See also
get_simple_parameters()
.
- classmethod get_simple_parameters()¶
Return or yield a list of names of simple parameter fields of every actor that uses this model.
When the list contains names for which no parameter field is defined, then Lino creates that parameter field as a copy of the database field of the same name.
This is also called by
get_title_tags()
, you don’t need to manually define title tags for simple parameters.
- classmethod get_default_table()¶
Used internally. Lino chooses during the kernel startup, for each model, one of the discovered Table subclasses as the “default table”.
- get_detail_action(ar)¶
Return the (bound) detail action to use for showing this object in a detail window. Return None when no detail form exists or the requesting user has no permission to see it.
ar is the action request that asks to see the detail. If the action request’s actor can be used for this model, then use its detail_action. Otherwise use the detail_action of this model’s default table.
When ar is None, the permission check is bypassed.
If self has a special attribute _detail_action defined, return this. This magic is used by
Menu.add_instance_action
.Usage example:
courses.Course
overrides this to return the detail action depending on the activity layout.
- classmethod get_layout_aliases()¶
Yield a series of (ALIAS, repl) tuples that cause a name ALIAS in a layout based on this model to be replaced by its replacement repl.
- lino.core.fields.wildcard_data_elems(model)¶
Yield names to be used as wildcard in the
column_names
of a table or whenfields_list()
finds a*
.
- lino.core.fields.fields_list(model, field_names)¶
Return a set with the names of the specified fields, checking whether each of them exists.
Arguments: model is any subclass of django.db.models.Model. It may be a string with the full name of a model (e.g.
"myapp.MyModel"
). field_names is a single string with a space-separated list of field names.If one of the names refers to a dummy field, this name will be ignored silently.
For example if you have a model MyModel with two fields foo and bar, then
dd.fields_list(MyModel,"foo bar")
will return['foo','bar']
anddd.fields_list(MyModel,"foo baz")
will raise an exception.TODO: either rename this to fields_set or change it to return an iterable on the fields.
- lino.core.fields.pointer_factory(cls, othermodel, *args, **kw)¶
Instantiate a ForeignKey or OneToOneField with some subtle differences:
It supports othermodel being None or the name of some non-installed model and returns a
DummyField
in that case. This is useful when designing reusable models.Explicitly sets the default value for on_delete to
CASCADE
(as required by Django 2).
- lino.core.fields.choices_for_field(ar, holder, field)¶
Return the choices for the given field and the given HTTP request whose holder is either a Model, an Actor or an Action.