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 )
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)
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' } }
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))
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))
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)
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 == {}
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' } }
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)
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 )
#-*- 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)
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)
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)
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
#-*- 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)
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')] }),
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'])