Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial

  • Loading branch information...
commit dff9f34b7df95060591dce920b780034565b4734 0 parents
Osiloke Emoekpere authored
Showing with 3,323 additions and 0 deletions.
  1. +27 −0 LISCENCE.txt
  2. +27 −0 README.rst
  3. +38 −0 setup.py
  4. +2 −0  widget/__init__.py
  5. +51 −0 widget/admin.py
  6. +45 −0 widget/fields.py
  7. +97 −0 widget/forms.py
  8. +62 −0 widget/migrations/0001_initial.py
  9. +42 −0 widget/migrations/0002_auto__add_field_widget_display_title.py
  10. +132 −0 widget/migrations/0003_auto__add_field_widget_keywords_string__add_field_widget_slug__add_fie.py
  11. +51 −0 widget/migrations/0004_auto__del_widget.py
  12. +69 −0 widget/migrations/0005_auto__add_widget.py
  13. +52 −0 widget/migrations/0006_auto__del_field_widget_short_url.py
  14. +51 −0 widget/migrations/0007_auto__del_field_widgetslot__order.py
  15. +88 −0 widget/migrations/0008_auto__add_field_widget_user.py
  16. +123 −0 widget/migrations/0009_auto__add_field_widget_page.py
  17. +130 −0 widget/migrations/0010_auto__add_field_widget_page_less__add_unique_widget_display_title.py
  18. +124 −0 widget/migrations/0011_auto__chg_field_widget_page.py
  19. +145 −0 widget/migrations/0012_auto__add_widgetmodel__del_field_widget_widget_module__add_field_widge.py
  20. +151 −0 widget/migrations/0013_auto__add_widgetoptions__add_widgetoptionfield.py
  21. +146 −0 widget/migrations/0015_auto__add_field_widgetoptions_user__add_field_widgetmodel_user.py
  22. +185 −0 widget/migrations/0016_auto__del_widgetoptions__del_widgetoptionfield__add_widgetoptiongroup_.py
  23. +154 −0 widget/migrations/0017_auto__chg_field_widget_widgetslot.py
  24. +150 −0 widget/migrations/0018_auto__del_field_widgetoptionentry_option_group__add_field_widgetoption.py
  25. +162 −0 widget/migrations/0019_auto__chg_field_widget_display_title__del_unique_widget_display_title_.py
  26. 0  widget/migrations/__init__.py
  27. +188 −0 widget/models.py
  28. +25 −0 widget/page_widgets.py
  29. +15 −0 widget/templates/widget/edit_widget_form.html
  30. +22 −0 widget/templates/widget/holder.html
  31. +9 −0 widget/templates/widget/list.html
  32. +9 −0 widget/templates/widget/options.html
  33. +1 −0  widget/templates/widget/success.html
  34. +26 −0 widget/templates/widget/widget_form.html
  35. +4 −0 widget/templates/widget/widget_loader.html
  36. +2 −0  widget/templatetags/__init__.py
  37. +86 −0 widget/templatetags/widget_tags.py
  38. +77 −0 widget/tests.py
  39. +9 −0 widget/urls.py
  40. +205 −0 widget/utilities.py
  41. +167 −0 widget/views.py
  42. +94 −0 widget/widget_pool.py
  43. +80 −0 widget/widget_renderer.py
27 LISCENCE.txt
@@ -0,0 +1,27 @@
+Copyright (c) Osiloke Emoekpere and individual contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of Mezzanine nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 README.rst
@@ -0,0 +1,27 @@
+OVERVIEW
+=========
+An app which makes it possible to create and add widgets to mezzanine pages.
+Widgets can be edited from the frontend using the mezzanine frontend app, which provides frontend add, edit and delete functions for any type of django model (to be released soon).
+This app is based extensively on mezzanine and django-classy-tags.
+
+METHODOLOGY
+===========
+
+Widgets can be placed in slots.
+Slots are just tag names assigned at runtime from django templates.
+They are not stored in the database. As a result of this a template designer does not worry about syncing the database
+everytime he wants to provision footer widgets.
+
+Widget Classes contain the logic used to render each widget and are dynamically loaded at runtime using the same autoloading logic
+used for django admin.
+
+USAGE
+========
+Render widgets on a page by first including the widget tag library.
+ {% load widget_tags %}
+
+The following snippet will render tags which are assigned to the footer slot.
+
+ {% render_widgets footer %}
+
+Widgets can be added from the frontend (comming soon)
38 setup.py
@@ -0,0 +1,38 @@
+from __future__ import with_statement
+
+import os
+import sys
+from setuptools import setup, find_packages
+
+
+CLASSIFIERS = [
+ 'Development Status :: 3 - Alpha',
+ 'Environment :: Web Environment',
+ 'Framework :: Django',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
+ 'Topic :: Software Development',
+ 'Topic :: Software Development :: Libraries :: Application Frameworks',
+]
+
+setup(
+ name='Mezzanine Widgets',
+ author='Osiloke Emoekpere',
+ version='0.0.9dev',
+ url='http://osiloke.com',
+ license='BSD',
+ description="An app which makes it possible to create and add widgets to mezzanine pages.",
+ long_description=open('README.txt').read(),
+ zip_safe=False,
+ include_package_data=True,
+ packages=find_packages(),
+ install_requires=[
+ "django >= 1.3",
+ "mezzanine",
+ "django-classy-tags",
+ ],
+ classifiers=CLASSIFIERS,
+)
2  widget/__init__.py
@@ -0,0 +1,2 @@
+__author__ = 'osilocks'
+
51 widget/admin.py
@@ -0,0 +1,51 @@
+from django.contrib.admin import TabularInline
+from mezzanine.core.admin import OwnableAdmin, TabularDynamicInlineAdmin
+from widget.models import WidgetOptionEntry
+from widget.models import WidgetSlot, Widget
+from django.contrib import admin
+from django.utils.translation import ugettext_lazy as _
+
+#class WidgetAdminForm(forms.ModelForm):
+# def __init__(self, *args, **kwargs):
+# super(WidgetAdminForm, self).__init__(*args, **kwargs)
+# self.fields['widget_class'] = PageWidgetClassField()
+class OptionEntryAdmin(TabularDynamicInlineAdmin):
+ model = WidgetOptionEntry
+
+
+#OptionFormset = forms.modelformset_factory(WidgetOptionEntry)
+
+
+class OptionsAdmin(TabularInline):
+ model = WidgetOptionEntry
+
+
+class WidgetAdmin(OwnableAdmin):
+ inlines = [OptionsAdmin,]
+ list_display = ("display_title", "status", "widgetslot", "admin_link")
+ list_display_links = ("display_title",)
+ list_editable = ("status",)
+ list_filter = ("status","widgetslot",)
+ search_fields = ("display_title","widget_class",)
+ date_hierarchy = "publish_date"
+ radio_fields = {"status": admin.HORIZONTAL}
+ fieldsets = (
+ (None, {"fields": ["page","display_title", "status",
+ ("publish_date", "expiry_date"), ]}),
+ (_("Widget"), {"fields": ("widgetslot", "widget_class")}),
+ )
+ def save_model(self, request, obj, form, change):
+ """
+ Set the ID of the parent page if passed in via querystring.
+ """
+ # Force parent to be saved to trigger handling of ordering and slugs.
+ parent = request.GET.get("widgetslot")
+ if parent is not None and not change:
+# obj.widgetslot_id = parent
+ obj._order = None
+ obj.slug = None
+ obj.save()
+ super(WidgetAdmin, self).save_model(request, obj, form, change)
+ pass
+admin.site.register(WidgetSlot, admin.ModelAdmin)
+admin.site.register(Widget, WidgetAdmin)
45 widget/fields.py
@@ -0,0 +1,45 @@
+from django import forms
+from django.db import models
+from django.utils.encoding import smart_unicode
+
+
+class PageWidgetClassField(forms.ChoiceField):
+ """Renders a PageWidgetClass field with choices obtained
+ from all the available widget classes
+ """
+ def __init__(self, *args, **kwargs):
+ kwargs.pop('max_length', '')
+ from widget.widget_pool import get_all_page_widgets
+ super(PageWidgetClassField, self).__init__(*args, **kwargs)
+ choices = get_all_page_widgets()
+ self.choices = choices
+
+
+class PageWidgetClass(models.CharField):
+ description = "A field which holds the name of a widget \
+ class associated with a page widget"
+
+ def __init__(self, *args, **kwargs):
+ kwargs['max_length'] = 255
+ from widget.widget_pool import get_all_page_widgets
+ kwargs['choices'] = get_all_page_widgets()
+ super(PageWidgetClass, self).__init__(*args, **kwargs)
+
+ def formfield(self, form_class=forms.CharField, **kwargs):
+ # This is a fairly standard way to set up some defaults
+# while letting the caller override them.
+ defaults = {'form_class': PageWidgetClassField}
+# if self.choices:
+# defaults = {'choices': self.choices}
+# else:
+# defaults = {'form_class': PageWidgetClassField}
+ defaults.update(kwargs)
+ return super(PageWidgetClass, self).formfield(**defaults)
+
+ def south_field_triple(self):
+ "Returns a suitable description of this field for South."
+ from south.modelsinspector import introspector
+ field_class = self.__class__.__module__ + "." + self.__class__.__name__
+ args, kwargs = introspector(self)
+ return (field_class, args, kwargs)
+
97 widget/forms.py
@@ -0,0 +1,97 @@
+from datetime import datetime
+from os.path import join
+
+from django import forms
+
+from widget.widget_pool import get_widget_options
+from widget.models import WidgetOptionEntry, Widget
+
+from mezzanine.pages.models import Page
+from mezzanine.forms import fields
+from mezzanine.conf import settings
+from mezzanine.forms.forms import fs
+
+from uuid import uuid4
+
+
+#def get_widget_form()
+class WidgetForm(forms.ModelForm):
+
+ def __init__(self, *args, **kwargs):
+ super(WidgetForm, self).__init__(*args, **kwargs)
+ self.uuid = str(uuid4())
+
+ class Meta:
+ model = Widget
+ fields = ('widget_class', 'user', 'page', 'widgetslot')
+ widgets = {
+ 'page': forms.HiddenInput(),
+ 'user': forms.HiddenInput(),
+ 'widgetslot': forms.HiddenInput()
+ }
+
+
+class WidgetOptionsForm(forms.Form):
+ """
+ Dynamically created form for displaying widget options
+ defined in a widget class. Based on mezzanine forms
+ """
+
+ hasOptions = False
+
+ def __init__(self, widget_class, *args, **kwargs):
+ """
+ Dynamically add each of the form fields for the given form model
+ instance and its related field model instances.
+ """
+ #get widget options from widget_class
+ super(WidgetOptionsForm, self).__init__(*args, **kwargs)
+ self.widget_class = widget_class
+ self.form_fields = get_widget_options(widget_class)
+ if self.form_fields:
+ self.hasOptions = True
+ for field in self.form_fields:
+ field_key = "option_%s" % field.name
+ field_class = fields.CLASSES[field.field_type]
+ field_widget = fields.WIDGETS.get(field.field_type)
+ field_args = {"label": field.name, "required": field.required,
+ "help_text": field.help_text}
+ arg_names = field_class.__init__.im_func.func_code.co_varnames
+ field_args.update(field.field_args)
+
+ if "max_length" in arg_names:
+ field_args["max_length"] = settings.FORMS_FIELD_MAX_LENGTH
+ if field_widget is not None:
+ field_args["widget"] = field_widget
+ self.fields[field_key] = field_class(**field_args)
+ css_class = field_class.__name__.lower()
+ if field.required:
+ css_class += " required"
+ if (settings.FORMS_USE_HTML5 and
+ field.field_type != fields.CHECKBOX_MULTIPLE):
+ self.fields[field_key].widget.attrs["required"] = ""
+ self.fields[field_key].widget.attrs["class"] = css_class
+ try:
+ if field.placeholder_text and not field.default:
+ text = field.placeholder_text
+ self.fields[field_key].widget.attrs["placeholder"] = text
+ except:
+ pass
+
+ def save(self, widget=None, **kwargs):
+ """
+ Save all option ``WidgetOptionEntry`` with reference to the passed widget.
+ """
+
+ if self.hasOptions:
+ for field in self.form_fields:
+ field_key = "option_%s" % field.name
+ value = self.cleaned_data[field_key]
+ if isinstance(value, list):
+ value = ", ".join([v.strip() for v in value])
+ if value:
+ option, created = WidgetOptionEntry.objects.get_or_create(
+ name=field.name, widget=widget, defaults={"value":value}
+ )
+ option.save()
+ return True
62 widget/migrations/0001_initial.py
@@ -0,0 +1,62 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'WidgetSlot'
+ db.create_table('widget_widgetslot', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('_order', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ))
+ db.send_create_signal('widget', ['WidgetSlot'])
+
+ # Adding model 'Widget'
+ db.create_table('widget_widget', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('_order', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('widget_module', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('active', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('author', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('acts_on', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('widgetslot', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['widget.WidgetSlot'], null=True)),
+ ))
+ db.send_create_signal('widget', ['Widget'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'WidgetSlot'
+ db.delete_table('widget_widgetslot')
+
+ # Deleting model 'Widget'
+ db.delete_table('widget_widget')
+
+
+ models = {
+ 'widget.widget': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
42 widget/migrations/0002_auto__add_field_widget_display_title.py
@@ -0,0 +1,42 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Widget.display_title'
+ db.add_column('widget_widget', 'display_title', self.gf('django.db.models.fields.CharField')(default='Will Change this later', max_length=255), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Widget.display_title'
+ db.delete_column('widget_widget', 'display_title')
+
+
+ models = {
+ 'widget.widget': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
132 ...migrations/0003_auto__add_field_widget_keywords_string__add_field_widget_slug__add_fie.py
@@ -0,0 +1,132 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Widget.keywords_string'
+ db.add_column('widget_widget', 'keywords_string', self.gf('django.db.models.fields.CharField')(default='', max_length=500, blank=True), keep_default=False)
+
+ # Adding field 'Widget.slug'
+ db.add_column('widget_widget', 'slug', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True), keep_default=False)
+
+ # Adding field 'Widget.status'
+ db.add_column('widget_widget', 'status', self.gf('django.db.models.fields.IntegerField')(default=1), keep_default=False)
+
+ # Adding field 'Widget.publish_date'
+ db.add_column('widget_widget', 'publish_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
+
+ # Adding field 'Widget.expiry_date'
+ db.add_column('widget_widget', 'expiry_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
+
+ # Adding field 'Widget.description'
+ db.add_column('widget_widget', 'description', self.gf('django.db.models.fields.TextField')(default='', blank=True), keep_default=False)
+
+ # Adding field 'Widget.short_url'
+ db.add_column('widget_widget', 'short_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), keep_default=False)
+
+ # Adding field 'Widget.site'
+ db.add_column('widget_widget', 'site', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['sites.Site']), keep_default=False)
+
+ # Adding field 'Widget.widget_file_title'
+ db.add_column('widget_widget', 'widget_file_title', self.gf('django.db.models.fields.CharField')(default='Default', max_length=255), keep_default=False)
+
+ # Changing field 'Widget.title'
+ db.alter_column('widget_widget', 'title', self.gf('django.db.models.fields.CharField')(max_length=100))
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Widget.keywords_string'
+ db.delete_column('widget_widget', 'keywords_string')
+
+ # Deleting field 'Widget.slug'
+ db.delete_column('widget_widget', 'slug')
+
+ # Deleting field 'Widget.status'
+ db.delete_column('widget_widget', 'status')
+
+ # Deleting field 'Widget.publish_date'
+ db.delete_column('widget_widget', 'publish_date')
+
+ # Deleting field 'Widget.expiry_date'
+ db.delete_column('widget_widget', 'expiry_date')
+
+ # Deleting field 'Widget.description'
+ db.delete_column('widget_widget', 'description')
+
+ # Deleting field 'Widget.short_url'
+ db.delete_column('widget_widget', 'short_url')
+
+ # Deleting field 'Widget.site'
+ db.delete_column('widget_widget', 'site_id')
+
+ # Deleting field 'Widget.widget_file_title'
+ db.delete_column('widget_widget', 'widget_file_title')
+
+ # Changing field 'Widget.title'
+ db.alter_column('widget_widget', 'title', self.gf('django.db.models.fields.CharField')(max_length=255))
+
+
+ models = {
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
51 widget/migrations/0004_auto__del_widget.py
@@ -0,0 +1,51 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting model 'Widget'
+ db.delete_table('widget_widget')
+
+
+ def backwards(self, orm):
+
+ # Adding model 'Widget'
+ db.create_table('widget_widget', (
+ ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+ ('acts_on', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('_order', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
+ ('widgetslot', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['widget.WidgetSlot'], null=True)),
+ ('author', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('short_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True)),
+ ('slug', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=100)),
+ ('display_title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('site', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sites.Site'])),
+ ('keywords_string', self.gf('django.db.models.fields.CharField')(max_length=500, blank=True)),
+ ('keywords', self.gf('mezzanine.generic.fields.KeywordsField')(object_id_field='object_pk', to=orm['generic.AssignedKeyword'])),
+ ('publish_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ('widget_module', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('widget_file_title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('active', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('expiry_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('widget', ['Widget'])
+
+
+ models = {
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
69 widget/migrations/0005_auto__add_widget.py
@@ -0,0 +1,69 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'Widget'
+ db.create_table('widget_widget', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('_order', self.gf('django.db.models.fields.IntegerField')(null=True)),
+ ('display_title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('widget_module', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('active', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('widget_file_title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('author', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('acts_on', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('widgetslot', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['widget.WidgetSlot'], null=True)),
+ ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
+ ('publish_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ('expiry_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ('short_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True)),
+ ('site', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sites.Site'])),
+ ))
+ db.send_create_signal('widget', ['Widget'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'Widget'
+ db.delete_table('widget_widget')
+
+
+ models = {
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
52 widget/migrations/0006_auto__del_field_widget_short_url.py
@@ -0,0 +1,52 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting field 'Widget.short_url'
+ db.delete_column('widget_widget', 'short_url')
+
+
+ def backwards(self, orm):
+
+ # Adding field 'Widget.short_url'
+ db.add_column('widget_widget', 'short_url', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), keep_default=False)
+
+
+ models = {
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'ordering': "('_order',)", 'object_name': 'WidgetSlot'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
51 widget/migrations/0007_auto__del_field_widgetslot__order.py
@@ -0,0 +1,51 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting field 'WidgetSlot._order'
+ db.delete_column('widget_widgetslot', '_order')
+
+
+ def backwards(self, orm):
+
+ # Adding field 'WidgetSlot._order'
+ db.add_column('widget_widgetslot', '_order', self.gf('django.db.models.fields.IntegerField')(null=True), keep_default=False)
+
+
+ models = {
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
88 widget/migrations/0008_auto__add_field_widget_user.py
@@ -0,0 +1,88 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Widget.user'
+ db.add_column('widget_widget', 'user', self.gf('django.db.models.fields.related.ForeignKey')(default=1, related_name='widgets', to=orm['auth.User']), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Widget.user'
+ db.delete_column('widget_widget', 'user_id')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
123 widget/migrations/0009_auto__add_field_widget_page.py
@@ -0,0 +1,123 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Widget.page'
+ db.add_column('widget_widget', 'page', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['pages.Page']), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Widget.page'
+ db.delete_column('widget_widget', 'page_id')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'pages.page': {
+ 'Meta': {'ordering': "('titles',)", 'object_name': 'Page'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'content_model': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'in_footer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'in_navigation': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'login_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'titles': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
130 widget/migrations/0010_auto__add_field_widget_page_less__add_unique_widget_display_title.py
@@ -0,0 +1,130 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Widget.page_less'
+ db.add_column('widget_widget', 'page_less', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
+
+ # Adding unique constraint on 'Widget', fields ['display_title']
+ db.create_unique('widget_widget', ['display_title'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'Widget', fields ['display_title']
+ db.delete_unique('widget_widget', ['display_title'])
+
+ # Deleting field 'Widget.page_less'
+ db.delete_column('widget_widget', 'page_less')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'pages.page': {
+ 'Meta': {'ordering': "('titles',)", 'object_name': 'Page'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'content_model': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'in_footer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'in_navigation': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'login_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'titles': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pages.Page']"}),
+ 'page_less': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
124 widget/migrations/0011_auto__chg_field_widget_page.py
@@ -0,0 +1,124 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Changing field 'Widget.page'
+ db.alter_column('widget_widget', 'page_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['pages.Page'], null=True))
+
+
+ def backwards(self, orm):
+
+ # Changing field 'Widget.page'
+ db.alter_column('widget_widget', 'page_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['pages.Page']))
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'pages.page': {
+ 'Meta': {'ordering': "('titles',)", 'object_name': 'Page'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'content_model': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'in_footer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'in_navigation': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'login_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'titles': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pages.Page']", 'null': 'True', 'blank': 'True'}),
+ 'page_less': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widget_module': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
145 ...migrations/0012_auto__add_widgetmodel__del_field_widget_widget_module__add_field_widge.py
@@ -0,0 +1,145 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'WidgetModel'
+ db.create_table('widget_widgetmodel', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('widget', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['widget.Widget'])),
+ ))
+ db.send_create_signal('widget', ['WidgetModel'])
+
+ # Deleting field 'Widget.widget_module'
+ db.delete_column('widget_widget', 'widget_module')
+
+ # Adding field 'Widget.widget_class'
+ db.add_column('widget_widget', 'widget_class', self.gf('widget.fields.PageWidgetClass')(default='', max_length=255), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'WidgetModel'
+ db.delete_table('widget_widgetmodel')
+
+ # Adding field 'Widget.widget_module'
+ db.add_column('widget_widget', 'widget_module', self.gf('django.db.models.fields.CharField')(default=1, max_length=255), keep_default=False)
+
+ # Deleting field 'Widget.widget_class'
+ db.delete_column('widget_widget', 'widget_class')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'pages.page': {
+ 'Meta': {'ordering': "('titles',)", 'object_name': 'Page'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'content_model': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'in_footer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'in_navigation': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'login_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'titles': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pages.Page']", 'null': 'True', 'blank': 'True'}),
+ 'page_less': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_class': ('widget.fields.PageWidgetClass', [], {'default': "''", 'max_length': '255'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetmodel': {
+ 'Meta': {'object_name': 'WidgetModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'widget': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.Widget']"})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
151 widget/migrations/0013_auto__add_widgetoptions__add_widgetoptionfield.py
@@ -0,0 +1,151 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'WidgetOptions'
+ db.create_table('widget_widgetoptions', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('widget', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['widget.Widget'])),
+ ))
+ db.send_create_signal('widget', ['WidgetOptions'])
+
+ # Adding model 'WidgetOptionField'
+ db.create_table('widget_widgetoptionfield', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ))
+ db.send_create_signal('widget', ['WidgetOptionField'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'WidgetOptions'
+ db.delete_table('widget_widgetoptions')
+
+ # Deleting model 'WidgetOptionField'
+ db.delete_table('widget_widgetoptionfield')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+ 'Meta': {'object_name': 'Keyword'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'pages.page': {
+ 'Meta': {'ordering': "('titles',)", 'object_name': 'Page'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'content_model': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'in_footer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'in_navigation': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'keywords': ('mezzanine.generic.fields.KeywordsField', [], {'object_id_field': "'object_pk'", 'to': "orm['generic.AssignedKeyword']"}),
+ 'keywords_string': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'login_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['pages.Page']"}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'short_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'titles': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True'})
+ },
+ 'sites.site': {
+ 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"},
+ 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'widget.widget': {
+ 'Meta': {'ordering': "('display_title',)", 'object_name': 'Widget'},
+ '_order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+ 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'acts_on': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'display_title': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'expiry_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pages.Page']", 'null': 'True', 'blank': 'True'}),
+ 'page_less': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'publish_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}),
+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'widgets'", 'to': "orm['auth.User']"}),
+ 'widget_class': ('widget.fields.PageWidgetClass', [], {'default': "''", 'max_length': '255'}),
+ 'widget_file_title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'widgetslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.WidgetSlot']", 'null': 'True'})
+ },
+ 'widget.widgetmodel': {
+ 'Meta': {'object_name': 'WidgetModel'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'widget': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.Widget']"})
+ },
+ 'widget.widgetoptionfield': {
+ 'Meta': {'object_name': 'WidgetOptionField'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'widget.widgetoptions': {
+ 'Meta': {'object_name': 'WidgetOptions'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'widget': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['widget.Widget']"})
+ },
+ 'widget.widgetslot': {
+ 'Meta': {'object_name': 'WidgetSlot'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['widget']
146 widget/migrations/0015_auto__add_field_widgetoptions_user__add_field_widgetmodel_user.py
@@ -0,0 +1,146 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'WidgetOptions.user'
+ db.add_column('widget_widgetoptions', 'user', self.gf('django.db.models.fields.related.ForeignKey')(default=1, related_name='widgetoptionss', to=orm['auth.User']), keep_default=False)
+
+ # Adding field 'WidgetModel.user'
+ db.add_column('widget_widgetmodel', 'user', self.gf('django.db.models.fields.related.ForeignKey')(default=1, related_name='widgetmodels', to=orm['auth.User']), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'WidgetOptions.user'
+ db.delete_column('widget_widgetoptions', 'user_id')
+
+ # Deleting field 'WidgetModel.user'
+ db.delete_column('widget_widgetmodel', 'user_id')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'generic.assignedkeyword': {
+ 'Meta': {'object_name': 'AssignedKeyword'},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'keyword': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'assignments'", 'to': "orm['generic.Keyword']"}),
+ 'object_pk': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'generic.keyword': {
+