X-Git-Url: https://git.mdrn.pl/django-migdal.git/blobdiff_plain/3d174fac85fa8b2659c198fbec43f90104baf341..7140368dfb24ff4a4e7f7943eb14e44dff7b7321:/migdal/models.py diff --git a/migdal/models.py b/migdal/models.py index c98b74f..75529d6 100644 --- a/migdal/models.py +++ b/migdal/models.py @@ -14,7 +14,7 @@ from django.template import loader, Context from django.utils.translation import get_language, ugettext_lazy as _, ugettext from django_comments_xtd.models import XtdComment from markupfield.fields import MarkupField -from fnpdjango.utils.models.translation import add_translatable +from fnpdjango.utils.models.translation import add_translatable, tQ from migdal import app_settings from migdal.fields import SlugNullField @@ -27,7 +27,7 @@ class Category(models.Model): verbose_name_plural = _('categories') def __unicode__(self): - return self.title + return self.title or u"" @models.permalink def get_absolute_url(self): @@ -40,6 +40,12 @@ add_translatable(Category, { }) +class PublishedEntryManager(models.Manager): + def get_query_set(self): + return super(PublishedEntryManager, self).get_query_set().filter( + tQ(published=True) + ) + class Entry(models.Model): type = models.CharField(max_length=16, choices=((t.db, t.slug) for t in app_settings.TYPES), @@ -51,7 +57,13 @@ class Entry(models.Model): 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) + canonical_url = models.URLField(_('canonical link'), null = True, blank = True) + + objects = models.Manager() + published_objects = PublishedEntryManager() class Meta: verbose_name = _('entry') @@ -62,17 +74,18 @@ class Entry(models.Model): 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: @@ -102,6 +115,12 @@ class Entry(models.Model): mail_text, settings.SERVER_EMAIL, [self.author_email] ) + def inline_html(self): + for att in self.attachment_set.all(): + if att.file.name.endswith(".html"): + with open(att.file.path) as f: + yield f.read() + add_translatable(Entry, languages=app_settings.OPTIONAL_LANGUAGES, fields={ 'needed': models.CharField(_('needed'), max_length=1, db_index=True, choices=(