# HG changeset patch # User Tero Marttila # Date 1376511960 -10800 # Node ID ffcffe3024f1da1315b28d33ac0f986fa7417e54 # Parent 0c933b568b55e55b4d03a0dbd36816d71fdc52c2 sane defaults for published in urlitems inline form diff -r 0c933b568b55 -r ffcffe3024f1 qrurls/admin.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'), diff -r 0c933b568b55 -r ffcffe3024f1 qrurls/models.py --- 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