• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
What’S New In Newforms Admin
 

What’S New In Newforms Admin

on

  • 3,153 views

 

Statistics

Views

Total Views
3,153
Views on SlideShare
3,153
Embed Views
0

Actions

Likes
4
Downloads
50
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    What’S New In Newforms Admin What’S New In Newforms Admin Presentation Transcript

    • What’s New in newforms-admin Brian Rosner DjangoCon 2008
    • What is it? • A branch of Django trunk that refactored django.contrib.admin to use newforms. • Many API improvements, model decoupling and new features. • Landed in trunk at revision 7967. • A part of Django 1.0.
    • What has changed? • No longer specify admin options in your model or model fields.
    • # models.py from django.db import models class Article(models.Model): title = models.CharField(max_length=50) slug = models.SlugField( prepopulate_fields=(‘title’,)) class Admin: list_display = (‘title’,)
    • What has changed? • No longer specify admin options in your model or model fields. • Use an admin.py module at application level to define your ModelAdmin classes.
    • # admin.py from django.contrib import admin from myproject.myapps.models import Article class ArticleAdmin(admin.ModelAdmin): list_display = (‘title’,) prepopulated_fields = {‘slug’: (‘title’,)}
    • What has changed? • No longer specify admin options in your model or model fields. • Use an admin.py module at application level to define your ModelAdmin classes. • Register ModelAdmin classes to an AdminSite instance.
    • # admin.py from django.contrib import admin from myproject.myapps.models import Article class ArticleAdmin(admin.ModelAdmin): list_display = (‘title’,) prepopulated_fields = {‘slug’: (‘title’,)} admin.site.register(Article, ArticleAdmin)
    • What has changed? • No longer specify admin options in your model or model fields. • Use an admin.py module at application level to define your ModelAdmin classes. • Register ModelAdmin classes to an AdminSite instance. • Hook up AdminSite instances in your URLconf.
    • # urls.py from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns(‘’, url(r’^admin/(.*)’, admin.site.root), )
    • edit_inline change • edit_inline has been completely refactored. • Inlines now subclass InlineModelAdmin. • InlineModelAdmin inherits from BaseModelAdmin. • Django provides StackedInline and TabularInline out of the box.
    • # models.py from django.db import models class Author(models.Model): name = models.CharField(max_length=50) class Admin: pass class Book(models.Model): author = models.ForeignKey(Author, edit_inline=models.STACKED) title = models.CharField(max_length=50, core=True)
    • # admin.py from django.contrib import admin from myproject.myapps.models import Author, Book class BookInline(admin.StackedInline): model = Book class AuthorAdmin(admin.ModelAdmin): inlines = [BookInline] admin.site.register(Author, AuthorAdmin)
    • TabularInline
    • What is new? • Formsets • Model formsets • Generic Inlines • Media definitions on forms and widgets
    • Formsets • Provides a simple API for handling more than one like form on the same page. • The underlying implementation of inlines. • django.forms.formsets.formset_factory
    • # forms.py from django import forms from django.forms.formsets import formset_factory class BookForm(forms.Form): name = forms.CharField() BookFormSet = formset_factory(BookForm)
    • # views.py from django.shortcuts import render_to_response from django.template import RequestContext from myproject.myapp.forms import BookFormSet def books(request): if request.method == ‘POST’: formset = BookFormSet(request.POST) if formset.is_valid(): # do something else: formset = BookFormSet() return render_to_response(‘books.html’, { ‘formset’: formset, }, context_instance=RequestContext(request)
    • {# books.html #} <form method=”POST” action=””> {% for form in formset.forms %} {{ form }} {% endfor %} </form>
    • Model formsets • Helpers for integration with models. • BaseModelFormSet and BaseInlineFormSet • modelformset_factory and inlineformset_factory
    • Generic Inlines • Inlines based on a generic foreign key. • Allows for a reusable inline that can be applied generically to ModelAdmin classes. • GenericInlineModelAdmin • GenericTabularInline and GenericStackedInline
    • # models.py from django.db import models from django.contrib.contenttypes import genric from django.contrib.contenttypes.models import * class Image(models.Model): image = models.ImageField(upload_to=’images’) object_pk = models.PositiveIntegerField() content_type = models.ForeignKey(ContentType) content_object = GenericForeignKey( ‘content_type’, ‘object_pk’)
    • # admin.py from django.contrib.contenttypes import generic from myproject.myapp.models import Image class ImageInline(generic.GenericInlineModelAdmin): model = Image ct_field = ‘content_type’ ct_fk_field = ‘object_pk’
    • Media definitions • Define media on forms and widgets. • Allows for simple reusable widgets. • Admin widgets use this so they can be used outside the admin. • Applies to ModelAdmin and InlineModelAdmin
    • class CalendarWidget(forms.TextInput): class Media: css = {‘all’: (‘pretty.css’,)} js = (‘animations.js’, ‘actions.js’)
    • >>> w = CalendarWidget() >>> print w.media <link href=’http://media.example.com/pretty.css’ type=’text/css’ media=’all’ rel=’stylesheet /> <script type=’text/javascript’ src=’http:// media.example.com/animatation.js’></script> <script type=’text/javascript’ src=’http:// media.example.com/actions.js’></script>
    • And one more thing • Formsets need to determine if a widget has changed data. • Uses form.has_changed and form.changed_data.
    • Resources • http://github.com/jezdez/django- mobileadmin/ • http://docs.djangoproject.com/en/dev/ref/ contrib/admin/ • http://oebfare.com
    • Questions?