Make site field editable on redirects

This commit is contained in:
Matt Westcott 2015-10-27 00:36:33 +00:00
parent 93cf24df73
commit b0878b1534
4 changed files with 67 additions and 4 deletions

View file

@ -1,11 +1,15 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from wagtail.wagtailadmin.widgets import AdminPageChooser
from wagtail.wagtailredirects import models
from wagtail.wagtailcore.models import Site
from wagtail.wagtailredirects.models import Redirect
class RedirectForm(forms.ModelForm):
site = forms.ModelChoiceField(label=_("From site"), queryset=Site.objects.all(), required=False, empty_label=_("All sites"))
def __init__(self, *args, **kwargs):
super(RedirectForm, self).__init__(*args, **kwargs)
self.fields['redirect_page'].widget = AdminPageChooser()
@ -13,5 +17,5 @@ class RedirectForm(forms.ModelForm):
required_css_class = "required"
class Meta:
model = models.Redirect
fields = ('old_path', 'is_permanent', 'redirect_page', 'redirect_link')
model = Redirect
fields = ('old_path', 'site', 'is_permanent', 'redirect_page', 'redirect_link')

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('wagtailredirects', '0002_add_verbose_names'),
]
operations = [
migrations.AlterField(
model_name='redirect',
name='site',
field=models.ForeignKey(null=True, to='wagtailcore.Site', verbose_name='Site', blank=True, related_name='redirects'),
),
]

View file

@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
class Redirect(models.Model):
old_path = models.CharField(verbose_name=_("Redirect from"), max_length=255, unique=True, db_index=True)
site = models.ForeignKey('wagtailcore.Site', verbose_name=_('Site'), null=True, blank=True, related_name='redirects', db_index=True, editable=False)
site = models.ForeignKey('wagtailcore.Site', verbose_name=_('Site'), null=True, blank=True, related_name='redirects', db_index=True)
is_permanent = models.BooleanField(verbose_name=_("Permanent"), default=True, help_text=_("Recommended. Permanent redirects ensure search engines forget the old page (the 'Redirect from') and index the new page instead."))
redirect_page = models.ForeignKey('wagtailcore.Page', verbose_name=_("Redirect to a page"), null=True, blank=True)
redirect_link = models.URLField(verbose_name=_("Redirect to any URL"), blank=True)

View file

@ -172,6 +172,7 @@ class TestRedirectsAddView(TestCase, WagtailTestUtils):
def test_add(self):
response = self.post({
'old_path': '/test',
'site': '',
'is_permanent': 'on',
'redirect_link': 'http://www.test.com/',
})
@ -185,6 +186,24 @@ class TestRedirectsAddView(TestCase, WagtailTestUtils):
self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/')
self.assertEqual(redirects.first().site, None)
def test_add_with_site(self):
localhost = Site.objects.get(hostname='localhost')
response = self.post({
'old_path': '/test',
'site': localhost.id,
'is_permanent': 'on',
'redirect_link': 'http://www.test.com/',
})
# Should redirect back to index
self.assertRedirects(response, reverse('wagtailredirects:index'))
# Check that the redirect was created
redirects = models.Redirect.objects.filter(old_path='/test')
self.assertEqual(redirects.count(), 1)
self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/')
self.assertEqual(redirects.first().site, localhost)
def test_add_validation_error(self):
response = self.post({
'old_path': '',
@ -223,6 +242,7 @@ class TestRedirectsEditView(TestCase, WagtailTestUtils):
response = self.post({
'old_path': '/test',
'is_permanent': 'on',
'site': '',
'redirect_link': 'http://www.test.com/ive-been-edited',
})
@ -233,6 +253,26 @@ class TestRedirectsEditView(TestCase, WagtailTestUtils):
redirects = models.Redirect.objects.filter(old_path='/test')
self.assertEqual(redirects.count(), 1)
self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/ive-been-edited')
self.assertEqual(redirects.first().site, None)
def test_edit_with_site(self):
localhost = Site.objects.get(hostname='localhost')
response = self.post({
'old_path': '/test',
'is_permanent': 'on',
'site': localhost.id,
'redirect_link': 'http://www.test.com/ive-been-edited',
})
# Should redirect back to index
self.assertRedirects(response, reverse('wagtailredirects:index'))
# Check that the redirect was edited
redirects = models.Redirect.objects.filter(old_path='/test')
self.assertEqual(redirects.count(), 1)
self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/ive-been-edited')
self.assertEqual(redirects.first().site, localhost)
def test_edit_validation_error(self):
response = self.post({