sane defaults for published in urlitems inline form
authorTero Marttila <terom@fixme.fi>
Wed, 14 Aug 2013 23:26:00 +0300
changeset 27 ffcffe3024f1
parent 26 0c933b568b55
child 28 d1733c82c278
sane defaults for published in urlitems inline form
qrurls/admin.py
qrurls/models.py
--- a/qrurls/admin.py	Wed Aug 14 23:25:29 2013 +0300
+++ b/qrurls/admin.py	Wed Aug 14 23:26:00 2013 +0300
@@ -1,9 +1,46 @@
+import datetime
+
 from django.contrib import admin
+import django.utils.html
+import django.forms.models
+
 from qrurls.models import URL, URLItem
-import django.utils.html
+
+class URLItemFormset (django.forms.models.BaseInlineFormSet) :
+    def __init__ (self, *args, **kwargs) :
+        urlfeed = kwargs.get('instance')
+
+        publishing_date = None
+        publishing_time = datetime.time()
+        
+        if urlfeed :
+            publishing_date = urlfeed.last_item().published.date()
+            publishing_time = urlfeed.publishing_schedule
+        
+        def publishing_schedule (count) :
+            if not publishing_date :
+                # starting today
+                start_date = datetime.date.today()
+                offset = 0
+            else :
+                # starting from the following day
+                start_date = publishing_date
+                offset = 1
+
+            for days in xrange(offset, count + offset) :
+                yield datetime.datetime.combine(
+                        publishing_date + datetime.timedelta(days=days),
+                        publishing_time
+                )
+
+        kwargs.update(initial=[
+                dict(published=publish) for publish in publishing_schedule(count=5)
+        ])
+        super(URLItemFormset, self).__init__(*args, **kwargs)
 
 class URLItemInline (admin.TabularInline) :
     model = URLItem
+    formset = URLItemFormset
 
 class URLAdmin (admin.ModelAdmin) :
     def qrcode_url (self, obj) :
@@ -37,7 +74,7 @@
     )
     fieldsets = (
         (None, {
-            'fields': ('shorturl', 'active_item', 'upcoming_item')
+            'fields': ('shorturl', 'active_item', 'upcoming_item', 'publishing_schedule')
         }),
         ("QRCode", {
             'fields': ('qrcode_url', 'qrcode_img'),
--- a/qrurls/models.py	Wed Aug 14 23:25:29 2013 +0300
+++ b/qrurls/models.py	Wed Aug 14 23:26:00 2013 +0300
@@ -1,3 +1,5 @@
+import datetime
+
 from django.db import models
 from django.core.urlresolvers import reverse
 import django.utils.http
@@ -8,6 +10,8 @@
 
 class URL(models.Model):
     shorturl = models.SlugField(unique=True)
+    publishing_schedule = models.TimeField(default=datetime.time(),
+            help_text="Default time to publish new URLItems")
 
     class Meta:
         verbose_name = u"URL Feed"
@@ -38,7 +42,7 @@
         except IndexError :
             return None
 
-    def upcoming_item(self, now=None) :
+    def upcoming_item (self, now=None) :
         """Following published URLItem."""
         if now is None :
             now = timezone.now()
@@ -48,6 +52,14 @@
         except IndexError :
             return None
 
+    def last_item (self) :
+        """The last URLItem available."""
+
+        try :
+            return URLItem.objects.filter(shorturl=self).order_by('-published')[0]
+        except IndexError :
+            return None
+
     def __unicode__ (self) :
         return self.shorturl