--- /dev/null
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'Entry.in_stream'
+ db.add_column('migdal_entry', 'in_stream',
+ self.gf('django.db.models.fields.BooleanField')(default=True),
+ keep_default=False)
+
+ # Adding field 'Entry.first_published_at'
+ db.add_column('migdal_entry', 'first_published_at',
+ self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True),
+ keep_default=False)
+
+ if not db.dry_run:
+ for entry in orm.Entry.objects.exclude(
+ published_at_en=None, published_at_pl=None):
+ if entry.published_at_en and entry.published_at_pl:
+ entry.first_published_at = min(
+ entry.published_at_en, entry.published_at_pl)
+ else:
+ entry.first_published_at = (
+ entry.published_at_en or entry.published_at_pl)
+ entry.save()
+
+ def backwards(self, orm):
+ # Deleting field 'Entry.in_stream'
+ db.delete_column('migdal_entry', 'in_stream')
+
+ # Deleting field 'Entry.first_published_at'
+ db.delete_column('migdal_entry', 'first_published_at')
+
+
+ models = {
+ 'migdal.attachment': {
+ 'Meta': {'object_name': 'Attachment'},
+ 'entry': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['migdal.Entry']"}),
+ 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'migdal.category': {
+ 'Meta': {'object_name': 'Category'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug_en': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'slug_pl': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
+ 'taxonomy': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'title_en': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64', 'db_index': 'True'}),
+ 'title_pl': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64', 'db_index': 'True'})
+ },
+ 'migdal.entry': {
+ 'Meta': {'ordering': "['-date']", 'object_name': 'Entry'},
+ '_body_en_rendered': ('django.db.models.fields.TextField', [], {}),
+ '_body_pl_rendered': ('django.db.models.fields.TextField', [], {}),
+ '_lead_en_rendered': ('django.db.models.fields.TextField', [], {}),
+ '_lead_pl_rendered': ('django.db.models.fields.TextField', [], {}),
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'author_email': ('django.db.models.fields.EmailField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
+ 'body_en': ('markupfield.fields.MarkupField', [], {'null': 'True', 'rendered_field': 'True', 'blank': 'True'}),
+ 'body_en_markup_type': ('django.db.models.fields.CharField', [], {'default': "'textile_pl'", 'max_length': '30', 'blank': 'True'}),
+ 'body_pl': ('markupfield.fields.MarkupField', [], {'null': 'True', 'rendered_field': 'True', 'blank': 'True'}),
+ 'body_pl_markup_type': ('django.db.models.fields.CharField', [], {'default': "'textile_pl'", 'max_length': '30', 'blank': 'True'}),
+ 'categories': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['migdal.Category']", 'null': 'True', 'blank': 'True'}),
+ 'changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'first_published_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'in_stream': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'lead_en': ('markupfield.fields.MarkupField', [], {'null': 'True', 'rendered_field': 'True', 'blank': 'True'}),
+ 'lead_en_markup_type': ('django.db.models.fields.CharField', [], {'default': "'textile_pl'", 'max_length': '30', 'blank': 'True'}),
+ 'lead_pl': ('markupfield.fields.MarkupField', [], {'null': 'True', 'rendered_field': 'True', 'blank': 'True'}),
+ 'lead_pl_markup_type': ('django.db.models.fields.CharField', [], {'default': "'textile_pl'", 'max_length': '30', 'blank': 'True'}),
+ 'needed_en': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1', 'db_index': 'True'}),
+ 'promo': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'published_at_en': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'published_at_pl': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'published_en': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'published_pl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'slug_en': ('migdal.fields.SlugNullField', [], {'max_length': '50', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'slug_pl': ('migdal.fields.SlugNullField', [], {'max_length': '50', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+ 'title_en': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'title_pl': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '16', 'db_index': 'True'})
+ }
+ }
+
+ complete_apps = ['migdal']
\ No newline at end of file
help_text=_('Used only to display gravatar and send notifications.'))
image = models.ImageField(_('image'), upload_to='entry/image/', null=True, blank=True)
promo = models.BooleanField(_('promoted'), default=False)
+ in_stream = models.BooleanField(_('in stream'), default=True)
categories = models.ManyToManyField(Category, null=True, blank=True, verbose_name=_('categories'))
+ first_published_at = models.DateTimeField(_('published at'), null=True, blank=True)
class Meta:
verbose_name = _('entry')
return self.title
def save(self, *args, **kwargs):
- if self.pk is not None:
- orig = type(self).objects.get(pk=self.pk)
- published_now = False
- for lc, ln in settings.LANGUAGES:
- if (getattr(self, "published_%s" % lc)
- and getattr(self, "published_at_%s" % lc) is None):
- setattr(self, "published_at_%s" % lc, datetime.now())
+ published_now = False
+ for lc, ln in settings.LANGUAGES:
+ if (getattr(self, "published_%s" % lc)
+ and getattr(self, "published_at_%s" % lc) is None):
+ now = datetime.now()
+ setattr(self, "published_at_%s" % lc, now)
+ if self.first_published_at is None:
+ self.first_published_at = now
published_now = True
- if published_now:
- self.notify_author_published()
super(Entry, self).save(*args, **kwargs)
+ if published_now and self.pk is not None:
+ self.notify_author_published()
def clean(self):
for lc, ln in settings.LANGUAGES: