Просмотр исходного кода

- Widgets support calls to model.clean()
- Its not longer possible to set "catch all" pruning policy... unless admin does it on purpose, that is.

Ralfp 12 лет назад
Родитель
Сommit
9f78c0466c
3 измененных файлов с 32 добавлено и 20 удалено
  1. 24 20
      misago/admin/widgets.py
  2. 6 0
      misago/prune/models.py
  3. 2 0
      misago/prune/views.py

+ 24 - 20
misago/admin/widgets.py

@@ -1,4 +1,5 @@
 from django import forms
+from django.core.exceptions import ValidationError
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.template import RequestContext
@@ -451,26 +452,29 @@ class FormWidget(BaseWidget):
         if request.method == 'POST':
             form = self.get_form_instance(FormType, request, model, self.get_initial_data(request, model), True)
             if form.is_valid():
-                model, message = self.submit_form(request, form, model)
-                if message.type != 'error':
-                    request.messages.set_flash(message, message.type, self.admin.id)
-                    # Redirect back to right page
-                    try:
-                        if 'save_new' in request.POST and self.get_new_url:
-                            return redirect(self.get_new_url(request, model))
-                    except AttributeError:
-                        pass
-                    try:
-                        if 'save_edit' in request.POST and self.get_edit_url:
-                            return redirect(self.get_edit_url(request, model))
-                    except AttributeError:
-                        pass
-                    try:
-                        if self.get_submit_url:
-                            return redirect(self.get_submit_url(request, model))
-                    except AttributeError:
-                        pass
-                    return redirect(self.get_fallback_url(request))
+                try:
+                    model, message = self.submit_form(request, form, model)
+                    if message.type != 'error':
+                        request.messages.set_flash(message, message.type, self.admin.id)
+                        # Redirect back to right page
+                        try:
+                            if 'save_new' in request.POST and self.get_new_url:
+                                return redirect(self.get_new_url(request, model))
+                        except AttributeError:
+                            pass
+                        try:
+                            if 'save_edit' in request.POST and self.get_edit_url:
+                                return redirect(self.get_edit_url(request, model))
+                        except AttributeError:
+                            pass
+                        try:
+                            if self.get_submit_url:
+                                return redirect(self.get_submit_url(request, model))
+                        except AttributeError:
+                            pass
+                        return redirect(self.get_fallback_url(request))
+                except ValidationError as e:
+                    message = Message(e.messages[0], 'error')
             else:
                 message = Message(form.non_field_errors()[0], 'error')
         else:

+ 6 - 0
misago/prune/models.py

@@ -1,7 +1,9 @@
 from datetime import timedelta
+from django.core.exceptions import ValidationError
 from django.db import models
 from django.db.models import Q
 from django.utils import timezone
+from django.utils.translation import ugettext_lazy as _
 from misago.users.models import User
 
 class Policy(models.Model):
@@ -14,6 +16,10 @@ class Policy(models.Model):
     registered = models.PositiveIntegerField(default=0)
     last_visit = models.PositiveIntegerField(default=0)
     
+    def clean(self):
+        if not (self.email and self.posts and self.registered and self.last_visit):
+            raise ValidationError(_("Pruning policy must have at least one pruning criteria set to be valid."))
+        
     def get_model(self):
         model = User.objects
         

+ 2 - 0
misago/prune/views.py

@@ -66,6 +66,7 @@ class New(FormWidget):
                       registered = form.cleaned_data['registered'],
                       last_visit = form.cleaned_data['last_visit'],
                      )
+        new_policy.clean()
         new_policy.save(force_insert=True)
         
         return new_policy, Message(_('New Pruning Policy has been created.'), 'success')
@@ -109,6 +110,7 @@ class Edit(FormWidget):
         target.posts = form.cleaned_data['posts']
         target.registered = form.cleaned_data['registered']
         target.last_visit = form.cleaned_data['last_visit']
+        target.clean()
         target.save(force_update=True)
         
         return target, Message(_('Changes in policy "%(name)s" have been saved.') % {'name': self.original_name}, 'success')