ObjectAdmin

The base type of EntityAdmin, is ObjectAdmin, which specifies most of the class attributes that can be used to customize the interface.

class camelot.admin.object_admin.ObjectAdmin(app_admin, entity)[source]

The ObjectAdmin class describes the interface that will be used to interact with objects of a certain class. The behaviour of this class and the resulting interface can be tuned by specifying specific class attributes:

The name used in the GUI

The name used in the GUI for things like window titles and such can be specified using the verbose_name attribute.

verbose_name

A human-readable name for the object, singular

verbose_name = _('movie')

If this isn’t given, the class name will be used

verbose_name_plural

A human-readable name for the object, plural

verbose_name_plural = _('movies')

If this isn’t given, Camelot will use verbose_name + “s”

Fields displayed

list_display

a list with the fields that should be displayed in a table view

list_columns_frozen

the number of columns on the left of the tableview that should be frozen (don’t dissapear when the user uses the horizontal scroll bar), defaults to zero

lines_per_row

An integer number specifying the height of a row in the table view, expressed as the number of lines of text it should be able to display. Defaults to 1.

form_display

a list with the fields that should be displayed in a form view, defaults to the same fields as those specified in list_display

class Admin(EntityAdmin):
    form_display = ['title', 'rating', 'cover']

instead of telling which fields to display. It is also possible to define the form itself

from camelot.view.forms import Form, TabForm, WidgetOnlyForm, HBoxForm

class Admin(EntityAdmin):
    form_display = TabForm([
    ('Movie', Form([
      HBoxForm([['title', 'rating'], WidgetOnlyForm('cover')]),
      'short_description',
      'releasedate',
      'director',
      'script',
      'genre',
      'description', 'tags'], scrollbars=True)),
    ('Cast', WidgetOnlyForm('cast'))
  ])

Behaviour

save_mode

Specifies when the data should be send from the view to the model and flushed to the database. The default mode is ‘on_change’, meaning that every change in the view will be send immediately to the database. Other possibilities are :

  • ‘on_leave’ : the data will be send from the view to the model when the view

    is closed, eg. : the form is closed.

delete_mode

Indicates if the deletion of an object should be confirmed by the user, defaults to ‘on_request’, indicating object should be deleted when the user hits the trash button. Other possibilities are :

  • ‘on_confirm’ : the user will be asked for confirmation before the delete takes place.
form_size

a tuple indicating the size of a form view, defaults to (700,500)

form_actions

Actions to be accessible by pushbuttons on the side of a form, a list of tuples (button_label, action_function) where action_function takes as its single argument, a method that returns the the object that was displayed by the form when the button was pressed:

class Admin(EntityAdmin):
    form_actions = [('Foo', lamda o_getter:print 'foo')]

Field attributes

field_attributes

A dictionary specifying for each field of the model some additional attributes on how they should be displayed. All of these attributes are propagated to the constructor of the delegate of this field:

class Movie(Entity):
    title = Field(Unicode(50))

    class Admin(EntityAdmin):
        list_display = ['title']
        field_attributes = dict(title=dict(editable=False))

The Field Attributes documentation describes the various keys that can be used in the field attributes class attribute of an ObjectAdmin or EntityAdmin.

Window state

form_state

Set this attribute to ‘maximized’ or ‘minimized’ for respective behaviour. These are the only two defined at the moment. Please use the constants defined in camelot.core.constants (MINIMIZE and MAXIMIZE). Note that this attr needs to be set at the form, highest in the form hierarchy to work. Setting this on embedded forms will not influence the window state. Example:

class Movie(Entity):
    title = Field(Unicode(50))

    class Admin(EntityAdmin):
        from camelot.core import constants
        list_display = ['title']
        form_state = constants.MAXIMIZED
        field_attributes = dict(title=dict(editable=False))

Varia

model

The QAbstractItemModel class to be used to display collections of this object, defaults to a CollectionProxy

TableView

The QWidget class to be used when a table view is needed

Other Admin classes can inherit ObjectAdmin if they want to provide additional functionallity, like introspection to set default field_attributes.

Note

While EntityAdmin can only be used for classes that are mapped by Sqlalchemy, ObjectAdmin can be used for plain old python objects as well.

A typical use case of an ObjectAdmin, is to display properties of Entity classes that return lists:

class B(object)
  ...
  class Admin(ObjectAdmin):
    ...

class A(Entity)
  ...
  @property
  def list_of_b(self):
      return [b1, b2, b3]

  class Admin(EntityAdmin):
    form_display = ['list_of_b']
    field_attributes = {'list_of_b': {'delegate':delegates.One2ManyDelegate,
                                      'target':B}}

Previous topic

Customizing the Admin classes

Next topic

EntityAdmin

This Page


Comments
blog comments powered by Disqus