コード例 #1
0
 def test_multi_form_saves_all_the_forms(self):
     ModelForm = modelform_factory(Article)
     MF = multiform_factory(ModelForm)
     MF.add_form('myapp')
     MF.add_form('myapp2')
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
         'myapp2-foo': 'Second',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals(
         {
             'myapp': {
                 'publish_from': '2010-11-12',
                 'publish_to': None,
                 'related_article': None,
                 'title': u'First'
             },
             'myapp2': {'foo': 'Second'}
         },
         art.app_data
     )
コード例 #2
0
 def test_multi_form_saves_all_the_forms(self):
     ModelForm = modelform_factory(Article)
     MF = multiform_factory(ModelForm)
     MF.add_form('myapp')
     MF.add_form('myapp2')
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
         'myapp2-foo': 'Second',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals(
         {
             'myapp': {
                 'publish_from': '2010-11-12',
                 'publish_to': None,
                 'related_article': None,
                 'title': u'First'
             },
             'myapp2': {
                 'foo': 'Second'
             }
         }, art.app_data)
コード例 #3
0
 def test_multi_form_saves_all_the_forms(self):
     MF = multiform_factory(Article,
                            form_opts={
                                'myapp': {},
                                'myapp2': {}
                            },
                            exclude=())
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
         'myapp2-foo': 'Second',
     }
     form = MF(data)
     assert form.is_valid()
     assert form.errors == {}
     art = form.save()
     assert art.app_data == {
         'myapp': {
             'publish_from': '2010-11-12',
             'publish_to': None,
             'related_article': None,
             'title': u'First'
         },
         'myapp2': {
             'foo': 'Second'
         }
     }
コード例 #4
0
ファイル: admin.py プロジェクト: rontom/hacking
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if self.multiform is None:
         return super(AppDataModelAdmin, self).get_form(request, obj=obj, **kwargs)
     return multiform_factory(self.model, **self._get_form_factory_opts(request, obj, **kwargs))
コード例 #5
0
 def get_form(self, request, obj=None, **kwargs):
     """
     Returns a Form class for use in the admin add view. This is used by
     add_view and change_view.
     """
     if self.multiform is None:
         return super(AppDataModelAdmin, self).get_form(request,
                                                        obj=obj,
                                                        **kwargs)
     return multiform_factory(
         self.model, **self._get_form_factory_opts(request, obj, **kwargs))
コード例 #6
0
 def test_form_can_be_removed(self):
     MF = multiform_factory(Article, form_opts={'myapp': {}})
     MF.remove_form('myapp')
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals({}, art.app_data)
コード例 #7
0
 def test_form_can_be_removed(self):
     MF = multiform_factory(Article, form_opts={'myapp': {}})
     MF.remove_form('myapp')
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals({}, art.app_data)
コード例 #8
0
 def test_form_can_be_removed(self):
     MF = multiform_factory(Article, form_opts={'myapp': {}}, exclude=())
     MF.remove_form('myapp')
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     assert form.is_valid()
     assert form.errors == {}
     art = form.save()
     assert art.app_data == {}
コード例 #9
0
 def test_form_can_be_added_to_parent(self):
     MF = multiform_factory(Article, multiform=self.MyMultiForm, exclude=())
     self.MyMultiForm.add_form('myapp', {})
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     assert form.is_valid()
     assert form.errors == {}
     art = form.save()
     assert art.app_data == {
         'myapp': {
             'publish_from': '2010-11-12',
             'publish_to': None,
             'related_article': None,
             'title': u'First'
         }
     }
コード例 #10
0
 def test_form_can_be_added_to_parent(self):
     MF = multiform_factory(Article, multiform=self.MyMultiForm)
     self.MyMultiForm.add_form('myapp', {})
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals(
         {
             'myapp': {
                 'publish_from': '2010-11-12',
                 'publish_to': None,
                 'related_article': None,
                 'title': u'First'
             }
         }, art.app_data)
コード例 #11
0
 def test_form_can_be_added_to_parent(self):
     MF = multiform_factory(Article, multiform=self.MyMultiForm)
     self.MyMultiForm.add_form('myapp', {})
     data = {
         'myapp-title': 'First',
         'myapp-publish_from': '2010-11-12',
     }
     form = MF(data)
     tools.assert_true(form.is_valid())
     tools.assert_equals({}, form.errors)
     art = form.save()
     tools.assert_equals(
         {
             'myapp': {
                 'publish_from': '2010-11-12',
                 'publish_to': None,
                 'related_article': None,
                 'title': u'First'
             }
         },
         art.app_data
     )
コード例 #12
0
#-*- coding: utf-8 -*-
import copy
from django.contrib import admin
from app_data.forms import multiform_factory
from app_data.admin import AppDataModelAdmin
from .models import MyModel, Tag


MyModelMultiForm = multiform_factory(MyModel)


class MyModelAdmin(AppDataModelAdmin):
    multiform = MyModelMultiForm

    @property
    def declared_fieldsets(self):
        df = [
            (None, {'fields': ['title', 'description', 'is_awesome']}),
        ]
        mf = self.multiform()
        for form in mf.app_forms.values():
            if hasattr(form, 'admin_fieldsets'):
                for admin_fieldset in form.admin_fieldsets:
                    df.append(copy.deepcopy(admin_fieldset))
        return df


admin.site.register(MyModel, MyModelAdmin)
admin.site.register(Tag)

コード例 #13
0
ファイル: forms.py プロジェクト: vfoss-org/aldryn-blog
        except translations_model.DoesNotExist:
            return None

    def report_error(self, conflict):
        address = '<a href="%(url)s" target="_blank">%(label)s</a>' % {
            'url': conflict.master.get_absolute_url(),
            'label': ugettext('the conflicting object')}
        error_message = ugettext('Conflicting slug. See %(address)s.') % {'address': address}
        self.append_to_errors(field='slug', message=mark_safe(error_message))

    def append_to_errors(self, field, message):
        try:
            self._errors[field].append(message)
        except KeyError:
            self._errors[field] = self.error_class([message])

    def is_edit_action(self):
        return self.instance.pk is not None


class CategoryForm(AutoSlugForm):

    slugified_field = 'name'

    class Meta:
        fields = ['name', 'slug']


# Used by app data
BlogPostMultiForm = multiform_factory(Post, form=PostForm)
コード例 #14
0
ファイル: admin.py プロジェクト: cooncesean/django-appdata
from django.contrib.admin import site
from django.forms.models import modelform_factory

from app_data.admin import AppDataModelAdmin
from app_data.forms import multiform_factory

from .models import Article

app_data = {
    'publish': { 'exclude': ['publish_to'] },
    'rss': { 'fields': ['title', 'author',] }
}
ArticleMultiForm = multiform_factory(modelform_factory(Article), **app_data)

class ArticleModelAdmin(AppDataModelAdmin):
    multiform = ArticleMultiForm

    fieldsets = [
        (None, {'fields': ['rss.title']}),
        ('Meta', {'fields': ['rss.author']}),
        ('Publish', {'fields': [('publish.publish_from', 'publish.published')]}),
    ]

site.register(Article, ArticleModelAdmin)
コード例 #15
0
from django.forms.models import BaseInlineFormSet
from django.core.exceptions import ValidationError
from app_data.forms import multiform_factory
from .models import Result

ResultMultiForm = multiform_factory(Result)


class ResultInlineFormset(BaseInlineFormSet):
    def clean(self):
        super(ResultInlineFormset, self).clean()

        # non-valid Quiz, don't bother
        if self.instance.choices is None:
            return

        required_choices = set(range(self.instance.choices))

        new_choices = set()
        # go through existing Results and check
        for form in self.initial_forms:
            # deleted form, skip
            if self.can_delete and self._should_delete_form(form):
                continue
            new_choices.add(form.cleaned_data['choice'])

        # new Results
        for form in self.extra_forms:
            # not changed, not adding a Result
            if not form.has_changed():
                continue
コード例 #16
0
ファイル: forms.py プロジェクト: francofuji/aldryn-blog
        except translations_model.DoesNotExist:
            return None

    def report_error(self, conflict):
        address = '<a href="%(url)s" target="_blank">%(label)s</a>' % {
            'url': conflict.master.get_absolute_url(),
            'label': ugettext('the conflicting object')}
        error_message = ugettext('Conflicting slug. See %(address)s.') % {'address': address}
        self.append_to_errors(field='slug', message=mark_safe(error_message))

    def append_to_errors(self, field, message):
        try:
            self._errors[field].append(message)
        except KeyError:
            self._errors[field] = self.error_class([message])

    def is_edit_action(self):
        return self.instance.pk is not None


class CategoryForm(AutoSlugForm):

    slugified_field = 'name'

    class Meta:
        fields = ['name', 'slug']


# Used by app data
BlogPostMultiForm = multiform_factory(Post, form=PostForm)
コード例 #17
0
#-*- coding: utf-8 -*-
import copy
from django.contrib import admin
from app_data.forms import multiform_factory
from app_data.admin import AppDataModelAdmin
from .models import MyModel, Tag

MyModelMultiForm = multiform_factory(MyModel)


class MyModelAdmin(AppDataModelAdmin):
    multiform = MyModelMultiForm

    @property
    def declared_fieldsets(self):
        df = [
            (None, {
                'fields': ['title', 'description', 'is_awesome']
            }),
        ]
        mf = self.multiform()
        for form in mf.app_forms.values():
            if hasattr(form, 'admin_fieldsets'):
                for admin_fieldset in form.admin_fieldsets:
                    df.append(copy.deepcopy(admin_fieldset))
        return df


admin.site.register(MyModel, MyModelAdmin)
admin.site.register(Tag)
コード例 #18
0
from app_data.forms import multiform_factory

from .models import Article

app_data = {
    'publish': {
        'exclude': ['publish_to']
    },
    'rss': {
        'fields': [
            'title',
            'author',
        ]
    }
}
ArticleMultiForm = multiform_factory(modelform_factory(Article), **app_data)


class ArticleModelAdmin(AppDataModelAdmin):
    multiform = ArticleMultiForm

    fieldsets = [
        (None, {
            'fields': ['rss.title']
        }),
        ('Meta', {
            'fields': ['rss.author']
        }),
        ('Publish', {
            'fields': [('publish.publish_from', 'publish.published')]
        }),
コード例 #19
0
ファイル: forms.py プロジェクト: ella/ella-quizzes
from django.forms.models import BaseInlineFormSet
from django.core.exceptions import ValidationError
from app_data.forms import multiform_factory
from .models import Result

ResultMultiForm = multiform_factory(Result)

class ResultInlineFormset(BaseInlineFormSet):
    def clean(self):
        super(ResultInlineFormset, self).clean()

        # non-valid Quiz, don't bother
        if self.instance.choices is None:
            return

        required_choices = set(range(self.instance.choices))

        new_choices = set()
        # go through existing Results and check
        for form in self.initial_forms:
            # deleted form, skip
            if self.can_delete and self._should_delete_form(form):
                continue
            new_choices.add(form.cleaned_data['choice'])

        # new Results
        for form in self.extra_forms:
            # not changed, not adding a Result
            if not form.has_changed():
                continue
            new_choices.add(form.cleaned_data['choice'])