Created
September 7, 2011 09:41
-
-
Save jonashaag/1200165 to your computer and use it in GitHub Desktop.
Revisions
-
jonashaag revised this gist
Sep 7, 2011 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,4 +7,4 @@ def categories(instance): class PostAdmin(ModelAdmin): list_display = ['title', categories] site.register(Post, PostAdmin) -
jonashaag revised this gist
Sep 7, 2011 . 4 changed files with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes.File renamed without changes.File renamed without changes.File renamed without changes. -
jonashaag renamed this gist
Sep 7, 2011 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
jonashaag revised this gist
Sep 7, 2011 . 3 changed files with 31 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,10 @@ from django.contrib.admin import site, ModelAdmin from models import Post def categories(instance): return ', '.join(instance.categories) class PostAdmin(ModelAdmin): list_display = ['title', categories] site.register(Post, PostAdmin) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,10 @@ from django import forms class StringListField(forms.CharField): def prepare_value(self, value): return ', '.join(value) def to_python(self, value): if not value: return [] return [item.strip() for item in value.split(',')] This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,11 @@ from django.db import models from djangotoolbox.fields import ListField from .forms import StringListField class CategoryField(ListField): def formfield(self, **kwargs): return models.Field.formfield(self, StringListField, **kwargs) class Post(models.Model): title = models.CharField(max_length=100) categories = CategoryField() -
jonashaag revised this gist
Sep 7, 2011 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -35,7 +35,7 @@ Trying to edit some posts in the admin crashes with:: Solution -------- What we need to do is to teach the admin how to display a ``ListField`` in the edit view. Our form field will be a simple ``<input type=text>`` input box with comma-separated category names. For more about custom form fields, refer to the `Django documentation <https://docs.djangoproject.com/en/dev/ref/forms/fields/#creating-custom-fields>`_ and your favourite search engine using the terms "Django custom form field". -
jonashaag revised this gist
Sep 7, 2011 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -71,7 +71,7 @@ string which is then displayed in the input box. Let's add a post and check out the resulting model object in the database: .. image:: http://img30.imageshack.us/img30/2391/editform.png :: -
jonashaag created this gist
Sep 7, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,81 @@ Howto use ListFields in Django's admin ====================================== Problem ------- Consider this blog post model: ``models.py`` ............. :: from django.db import models from djangotoolbox.fields import ListField class Post(models.Model): title = models.CharField(max_length=100) categories = ListField() ``admin.py`` ............ :: from django.contrib.admin import site from models import Post site.register(Post) Trying to edit some posts in the admin crashes with:: No form field implemented for <class 'djangotoolbox.fields.ListField'> Solution -------- What we need to do is to teach the admin how to display a ``ListField`` in the edit view. Our form field will a simple ``<input type=text>`` input box with comma-separated category names. For more about custom form fields, refer to the `Django documentation <https://docs.djangoproject.com/en/dev/ref/forms/fields/#creating-custom-fields>`_ and your favourite search engine using the terms "Django custom form field". First, we need to subclass ``ListField`` to override the ``formfield`` method:: from .forms import StringListField class CategoryField(ListField): def formfield(self, **kwargs): return models.Field.formfield(self, StringListField, **kwargs) class Post(models.Model): title = models.CharField(max_length=100) categories = CategoryField() Then, in ``forms.py``, we define ``StringListField``:: from django import forms class StringListField(forms.CharField): def prepare_value(self, value): return ', '.join(value) def to_python(self, value): if not value: return [] return [item.strip() for item in value.split(',')] This will covert the comma-separated input box contents into a Python ``list``, and the ``list`` value that is fetched from the database int a comma-separated string which is then displayed in the input box. Let's add a post and check out the resulting model object in the database: .. image:: edit-form.png :: >>> Post.objects.get(title='foo').categories [u'spam', u'eggs', u'bar'] It worked! Simple, isn't it?