aboutsummaryrefslogtreecommitdiff
path: root/weblog/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'weblog/models.py')
-rw-r--r--weblog/models.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/weblog/models.py b/weblog/models.py
new file mode 100644
index 0000000..80e917e
--- /dev/null
+++ b/weblog/models.py
@@ -0,0 +1,93 @@
+from django.db import models
+from django.shortcuts import reverse
+from django.contrib.auth.models import User
+from django.forms import ModelForm, Textarea
+from django.utils.translation import ugettext_lazy as _, pgettext_lazy
+
+class Category(models.Model):
+ name = models.CharField(max_length=250, verbose_name=pgettext_lazy('Noun, not personal name', 'Name'), blank=False, unique=True)
+ slug = models.SlugField(max_length=60, verbose_name=_('Slug (URL)'), db_index=True, unique=True)
+ parent_category = models.ForeignKey('self', verbose_name=_('Parent category'), null=True, blank=True)
+
+ def get_absolute_url(self):
+ return reverse('weblog:CategoryIndex', kwargs={'category_slug': self.slug})
+
+ def __str__(self):
+ return self.name
+
+ class Meta:
+ verbose_name = pgettext_lazy('Post category', 'Category')
+ verbose_name_plural = pgettext_lazy('Post categories', 'Categories')
+
+class CategoryTranslation(models.Model):
+ name = models.CharField(max_length=250, verbose_name=pgettext_lazy('Noun, not personal name', 'Name'), blank=False)
+ language = models.CharField(max_length=5, verbose_name=_('Language (ISO)'), blank=False)
+ category = models.ForeignKey(Category, verbose_name = pgettext_lazy('Post category', 'Category'), blank=False)
+
+ def __str__(self):
+ return self.name
+
+ def slug(self):
+ return self.category.slug
+
+ class Meta:
+ verbose_name = _('Category name translation')
+ verbose_name_plural = _('Category name translations')
+
+
+class BlogPost(models.Model):
+ author = models.ForeignKey(User, verbose_name=_('Author'))
+ title = models.CharField(max_length=100, verbose_name=pgettext_lazy('As in name', 'Title'), blank=False)
+ content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
+ preview_image = models.ImageField(upload_to='weblog/preview_images/%Y/%m/%d/', blank=True, verbose_name=_('Preview image'))
+ preview_text = models.CharField(max_length=250, blank=True, verbose_name=_('Preview Text'))
+ original_language = models.CharField(max_length=5, verbose_name=_('Original language (ISO)'), blank=True)
+ slug = models.SlugField(max_length=100, verbose_name=_('Slug (URL)'), db_index=True, unique=True)
+ categories = models.ManyToManyField(Category, verbose_name=pgettext_lazy('Post categories', 'Categories'), blank=True)
+ published = models.BooleanField(verbose_name=pgettext_lazy('Make post viewable', 'Published'))
+ publish_date = models.DateTimeField(verbose_name=_('Publish date'))
+
+ def get_absolute_url(self):
+ if self.categories.all().count() > 0:
+ category = self.categories.all()[0].slug
+ return reverse('weblog:PostView', kwargs={'category_slug': category, 'post_slug': self.slug})
+ else:
+ return reverse('weblog:PostView', kwargs={'category_slug': 'misc', 'post_slug': self.slug})
+
+ def __str__(self):
+ return self.title
+
+ class Meta:
+ ordering = ['-publish_date', 'title']
+ verbose_name = _('Blog Post')
+ verbose_name_plural = _('Blog Posts')
+
+class Translation(models.Model):
+ post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'))
+ language = models.CharField(max_length=5, verbose_name=_('Language (ISO)'), blank=False)
+ title = models.CharField(max_length=100, verbose_name=pgettext_lazy('As in name', 'Title'), blank=False)
+ content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
+ preview_image = models.ImageField(upload_to='weblog/preview_images/%Y/%m/%d/', blank=True, verbose_name=_('Preview image'))
+ preview_text = models.CharField(max_length=250, blank=True, verbose_name=_('Preview Text'))
+
+ class Meta:
+ verbose_name = _('Translation')
+ verbose_name_plural = _('Translations')
+
+class PostComment(models.Model):
+ author = models.ForeignKey(User, verbose_name=_('Author'), null=True, blank=True)
+ post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'))
+ content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
+
+ class Meta:
+ verbose_name = pgettext_lazy('Noun', 'Comment')
+ verbose_name_plural = pgettext_lazy('Noun', 'Comments')
+
+class PostCommentForm(ModelForm):
+ class Meta:
+ model = PostComment
+ fields = ('content',)
+ labels = {'content': ''}
+ widgets = {
+ 'content': Textarea(attrs={'class': 'form-control', 'rows': '5'}),
+ } \ No newline at end of file