--- 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