Mark Lavin committed 0efece0

Added basic admin docs. fixes #3.

  • Participants
  • Parent commits b44599b

Comments (0)

Files changed (3)

File docs/admin.rst

+Admin Integration
+Django-Selectables will work in the admin. To get started on integrated the
+fields and widgets in the admin make sure you are familiar with the Django
+documentation on the `ModelAdmin.form <>`_ 
+and `ModelForms <>`_ particularly
+on `overriding the default widgets <>`_. As you will see integrating Django-Selectables in the admin
+is the same as working with regular forms.
+Basic Example
+In our sample project we have a `Farm` model with a foreign key to `auth.User` and 
+a many to many relation to our `Fruit` model.
+    .. literalinclude:: ../example/core/
+        :lines: 11-17
+In `` we will define the form and associate it with the `FarmAdmin`.
+    .. literalinclude:: ../example/core/
+        :lines: 12-36
+You'll note this form also for new users to be created and associated with the
+farm if no user is found matching the given name. To make use of this feature we
+need to add `owner` to the exclude so that it will pass model validation. Unfortunately
+that means we must set the owner manual in the save and in the initial data because
+the `ModelForm` will no longer do this for you. Since `fruit` does not allow new
+items you'll see these steps are not necessary.
+Inline Example
+With our `Farm` model we can also associate the `UserAdmin` with a `Farm`
+by making use of the `InlineModelAdmin 
+We can even make use of the same `FarmAdminForm`.
+    .. literalinclude:: ../example/core/
+        :lines: 39-48
+The auto-complete functions will be bound as new forms are added dynamically.

File docs/index.rst

+    admin

File example/core/

 from django import forms
 import selectable.forms as selectable
-from selectable.forms.widgets import MEDIA_PREFIX
 from example.core.models import Fruit, Farm
 from example.core.lookups import FruitLookup, OwnerLookup
         widgets = {
             'fruit': selectable.AutoCompleteSelectMultipleWidget(lookup_class=FruitLookup),
+        exclude = ('owner', )
-    def clean(self, *args, **kwargs):
+    def __init__(self, *args, **kwargs):
+        super(FarmAdminForm, self).__init__(*args, **kwargs)
+        if self.instance and and self.instance.owner:
+            self.initial['owner'] = self.instance.owner
+    def save(self, *args, **kwargs):
         owner = self.cleaned_data['owner']
         if owner and not
             owner = User.objects.create_user(username=owner.username, email='')
-            self.cleaned_data['owner'] = owner
-        return self.cleaned_data
+        self.instance.owner = owner
+        return super(FarmAdminForm, self).save(*args, **kwargs)
 class FarmAdmin(admin.ModelAdmin):