aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2012-03-22 00:04:01 +0100
committerGravatar Tom Willemsen2012-03-22 00:04:01 +0100
commit921d06a8e01e2613abdd07ce4d1a88d4957fe0d1 (patch)
tree4835765df13245d6778c1560d86a59ec2140aea8
parentf30c00af6db5e5a4eab516058829d46c2d379000 (diff)
downloadryuslash.org-921d06a8e01e2613abdd07ce4d1a88d4957fe0d1.tar.gz
ryuslash.org-921d06a8e01e2613abdd07ce4d1a88d4957fe0d1.zip
Add Category model
Each feed can belong to multiple categories. A category is only a slug.
-rw-r--r--aggregator/fixtures/initial_data.json35
-rw-r--r--aggregator/migrations/0003_auto__add_category.py70
-rw-r--r--aggregator/models.py10
3 files changed, 108 insertions, 7 deletions
diff --git a/aggregator/fixtures/initial_data.json b/aggregator/fixtures/initial_data.json
index 5926e9c..e91883d 100644
--- a/aggregator/fixtures/initial_data.json
+++ b/aggregator/fixtures/initial_data.json
@@ -1,5 +1,19 @@
[
{
+ "model": "aggregator.Category",
+ "pk": 1,
+ "fields": {
+ "name": "misc"
+ }
+ },
+ {
+ "model": "aggregator.Category",
+ "pk": 2,
+ "fields": {
+ "name": "code"
+ }
+ },
+ {
"model": "aggregator.Feed",
"pk": 1,
"fields": {
@@ -7,7 +21,8 @@
"base_url": "http://www.advogato.org/",
"feed_url": "person/ryuslash/rss.xml",
"profile_url": "person/ryuslash",
- "favicon_ext": "ico"
+ "favicon_ext": "ico",
+ "categories": [ 1 ]
}
},
{
@@ -19,7 +34,8 @@
"feed_url": "public/ryuslash.atom",
"profile_url": "public/ryuslash",
"br2nl": true,
- "with_markdown": true
+ "with_markdown": true,
+ "categories": [ 1 ]
}
},
{
@@ -30,7 +46,8 @@
"base_url": "http://identi.ca/",
"feed_url": "api/statuses/user_timeline/107950.rss",
"profile_url": "ryuslash",
- "favicon_ext": "ico"
+ "favicon_ext": "ico",
+ "categories": [ 1 ]
}
},
{
@@ -40,7 +57,8 @@
"name": "Github",
"base_url": "https://github.com/",
"feed_url": "ryuslash.atom",
- "profile_url": "ryuslash"
+ "profile_url": "ryuslash",
+ "categories": [ 2 ]
}
},
{
@@ -50,7 +68,8 @@
"name": "Gitorious",
"base_url": "https://gitorious.org/",
"feed_url": "~ryuslash/feed.atom",
- "profile_url": "~ryuslash"
+ "profile_url": "~ryuslash",
+ "categories": [ 2 ]
}
},
{
@@ -60,7 +79,8 @@
"name": "Ikiwiki",
"base_url": "http://ryuslash.org/wiki/",
"feed_url": "index.rss",
- "uses_title": true
+ "uses_title": true,
+ "categories": [ 1 ]
}
},
{
@@ -72,7 +92,8 @@
"feed_url": "user/ryuslash/.rss",
"profile_url": "usr/ryuslash/",
"uses_title": true,
- "favicon_ext": "ico"
+ "favicon_ext": "ico",
+ "categories": [ 1 ]
}
}
]
diff --git a/aggregator/migrations/0003_auto__add_category.py b/aggregator/migrations/0003_auto__add_category.py
new file mode 100644
index 0000000..9997320
--- /dev/null
+++ b/aggregator/migrations/0003_auto__add_category.py
@@ -0,0 +1,70 @@
+# encoding: 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 model 'Category'
+ db.create_table('aggregator_category', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.SlugField')(max_length=50, db_index=True)),
+ ))
+ db.send_create_signal('aggregator', ['Category'])
+
+ # Adding M2M table for field categories on 'Feed'
+ db.create_table('aggregator_feed_categories', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('feed', models.ForeignKey(orm['aggregator.feed'], null=False)),
+ ('category', models.ForeignKey(orm['aggregator.category'], null=False))
+ ))
+ db.create_unique('aggregator_feed_categories', ['feed_id', 'category_id'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'Category'
+ db.delete_table('aggregator_category')
+
+ # Removing M2M table for field categories on 'Feed'
+ db.delete_table('aggregator_feed_categories')
+
+
+ models = {
+ 'aggregator.category': {
+ 'Meta': {'object_name': 'Category'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'})
+ },
+ 'aggregator.feed': {
+ 'Meta': {'ordering': "['-updated']", 'object_name': 'Feed'},
+ 'base_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}),
+ 'br2nl': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['aggregator.Category']", 'symmetrical': 'False'}),
+ 'favicon_ext': ('django.db.models.fields.CharField', [], {'default': "'png'", 'max_length': '4'}),
+ 'feed_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'profile_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '500', 'blank': 'True'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'uses_title': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'with_markdown': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'aggregator.post': {
+ 'Meta': {'ordering': "['-updated']", 'object_name': 'Post'},
+ 'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'body': ('django.db.models.fields.TextField', [], {}),
+ 'feed': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['aggregator.Feed']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'post_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '255'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
+ }
+ }
+
+ complete_apps = ['aggregator']
diff --git a/aggregator/models.py b/aggregator/models.py
index b5c4f3c..4936821 100644
--- a/aggregator/models.py
+++ b/aggregator/models.py
@@ -1,5 +1,11 @@
from django.db import models
+class Category(models.Model):
+ name = models.SlugField()
+
+ def __unicode__(self):
+ return self.name.capitalize()
+
class Feed(models.Model):
name = models.CharField(max_length=200)
base_url = models.URLField(max_length=255)
@@ -11,6 +17,7 @@ class Feed(models.Model):
uses_title = models.BooleanField(default=False)
br2nl = models.BooleanField(default=False)
with_markdown = models.BooleanField(default=False)
+ categories = models.ManyToManyField(Category)
def get_profile_url(self):
return self.base_url + self.profile_url
@@ -21,6 +28,9 @@ class Feed(models.Model):
def get_favicon_url(self):
return self.base_url + 'favicon.' + self.favicon_ext
+ def __unicode__(self):
+ return self.name
+
class Meta:
ordering = [ '-updated' ]