def copy(self): """ Copy this form and its fields. """ form_copy = Form( title=self.title, slug=uuid.uuid4(), template_name=self.template_name, fields=self.fields, submit_button_text=self.submit_button_text, success_message=self.success_message, error_message=self.error_message, post_redirect_page=self.post_redirect_page, process_form_submission_hooks=self.process_form_submission_hooks ) form_copy.save() # additionally copy the advanced settings if they exist SettingsModel = get_advanced_settings_model() if SettingsModel: try: advanced = SettingsModel.objects.get(form=self) advanced.pk = None advanced.form = form_copy advanced.save() except SettingsModel.DoesNotExist: pass return form_copy
def test_copy_copies_advanced_settings(self): from wagtailstreamforms.utils.loading import get_advanced_settings_model SettingsModel = get_advanced_settings_model() SettingsModel.objects.create(form=self.test_form, name='foo', number=1) copied = self.test_form.copy() SettingsModel.objects.get(form=copied, name='foo', number=1)
from django import forms from django.contrib import messages from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext as _ from django.views.generic import UpdateView from wagtailstreamforms.models import Form from wagtailstreamforms.utils.loading import get_advanced_settings_model from wagtailstreamforms.wagtail_hooks import FormURLHelper SettingsModel = get_advanced_settings_model() class AdvancedSettingsForm(forms.ModelForm): class Meta: exclude = ("form", ) model = SettingsModel class AdvancedSettingsView(UpdateView): form_class = AdvancedSettingsForm model = SettingsModel template_name = "streamforms/advanced_settings.html" success_message = _("Form '%s' advanced settings updated.") @property def url_helper(self): return FormURLHelper(model=Form) def get_object(self, queryset=None): form_pk = self.kwargs.get("pk") form = get_object_or_404(Form, pk=form_pk)
def test_valid_model_returns_class(self): self.assertIs(get_advanced_settings_model(), ValidFormSettingsModel)
def test_invalid_model_inheritance(self): msg = "must inherit from 'wagtailstreamforms.models.AbstractFormSetting'" with self.assertRaisesMessage(ImproperlyConfigured, msg): get_advanced_settings_model()
def test_invalid_import(self): msg = "refers to model 'foo.Bar' that has not been installed" with self.assertRaisesMessage(ImproperlyConfigured, msg): get_advanced_settings_model()
def test_invalid_string(self): msg = "must be of the form 'app_label.model_name'" with self.assertRaisesMessage(ImproperlyConfigured, msg): get_advanced_settings_model()
def test_default_none(self): self.assertIsNone(get_advanced_settings_model())