]> git.openstreetmap.org Git - osqa.git/blob - forum/migrations/0018_comments_to_node.py
Applies some of the Justin Grant's patches.
[osqa.git] / forum / migrations / 0018_comments_to_node.py
1 # encoding: utf-8\r
2 import datetime\r
3 from south.db import db\r
4 from south.v2 import DataMigration\r
5 from django.db import models\r
6 from forum.migrations import ProgressBar\r
7 \r
8 class Migration(DataMigration):\r
9     \r
10     def forwards(self, orm):\r
11         c_count = orm.Comment.objects.count()\r
12         print "\nConverting %d comments:" % c_count\r
13         progress = ProgressBar(c_count)\r
14 \r
15         id_map = {}\r
16 \r
17         for c in orm.Comment.objects.all():\r
18             node = orm.Node(\r
19                 node_type='comment',\r
20                 author=c.user,\r
21                 added_at=c.added_at,\r
22                 score=c.score,\r
23                 vote_up_count=c.score,\r
24                 vote_down_count=0,\r
25                 offensive_flag_count=0,\r
26                 last_edited_at=c.added_at,\r
27                 last_edited_by=c.user,\r
28                 body=c.comment,\r
29                 deleted=c.deleted,\r
30                 deleted_by=c.deleted_by,\r
31                 deleted_at=c.deleted_at,\r
32                 parent=c.node,\r
33             )\r
34             node.save()\r
35 \r
36             id_map[c.id] = node\r
37 \r
38             revision = orm.NodeRevision(\r
39                 summary="Initial revsion",\r
40                 revision=1,\r
41                 revised_at=c.added_at,\r
42                 body=c.comment,\r
43                 author=c.user,\r
44                 node=node,\r
45             )\r
46 \r
47             revision.save()\r
48 \r
49             node.active_revision = revision\r
50             node.save()\r
51 \r
52             for v in orm.LikedComment.objects.filter(comment=c):\r
53                 vote = orm.Vote(\r
54                     node=node,\r
55                     vote=1,\r
56                     voted_at=v.added_at,\r
57                     canceled=v.canceled,\r
58                     user=v.user,\r
59                 )\r
60 \r
61                 vote.save()\r
62 \r
63             progress.update()\r
64 \r
65         print "\n...done\n"\r
66 \r
67         ctype = orm['contenttypes.ContentType'].objects.get(name="comment").id\r
68         ntype = orm['contenttypes.ContentType'].objects.get(name="node").id\r
69 \r
70         #Converting activity\r
71         activities = orm.Activity.objects.filter(content_type__id=ctype)\r
72         activity_count = activities.count()\r
73         print "Converting %d activity references:" % activity_count\r
74         progress = ProgressBar(activity_count)\r
75 \r
76         for a in activities:\r
77             node = id_map.get(a.object_id, None)\r
78             if node:\r
79                 a.content_type_id = ntype\r
80                 a.object_id = node.id\r
81                 a.save()\r
82 \r
83             progress.update()\r
84 \r
85         print "\n...done\n"\r
86     \r
87     \r
88     def backwards(self, orm):\r
89         "Write your backwards methods here."\r
90     \r
91     models = {\r
92         'auth.group': {\r
93             'Meta': {'object_name': 'Group'},\r
94             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
95             'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),\r
96             'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})\r
97         },\r
98         'auth.permission': {\r
99             'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},\r
100             'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\r
101             'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),\r
102             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
103             'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})\r
104         },\r
105         'auth.user': {\r
106             'Meta': {'object_name': 'User'},\r
107             'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
108             'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),\r
109             'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\r
110             'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),\r
111             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
112             'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
113             'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
114             'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
115             'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
116             'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),\r
117             'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),\r
118             'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),\r
119             'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})\r
120         },\r
121         'contenttypes.contenttype': {\r
122             'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},\r
123             'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\r
124             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
125             'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),\r
126             'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})\r
127         },\r
128         'forum.activity': {\r
129             'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},\r
130             'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
131             'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),\r
132             'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),\r
133             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
134             'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
135             'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\r
136             'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"})\r
137         },\r
138         'forum.anonymousnode': {\r
139             'Meta': {'object_name': 'AnonymousNode', '_ormbases': ['forum.Node']},\r
140             'convertible_to': ('django.db.models.fields.CharField', [], {'default': "'node'", 'max_length': '16'}),\r
141             'node_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['forum.Node']", 'unique': 'True', 'primary_key': 'True'}),\r
142             'validation_hash': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_content'", 'to': "orm['forum.Node']"})\r
143         },\r
144         'forum.answer': {\r
145             'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},\r
146             'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
147             'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
148             'accepted_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']", 'null': 'True'}),\r
149             'node_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['forum.Node']", 'unique': 'True', 'primary_key': 'True'}),\r
150             'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
151             'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})\r
152         },\r
153         'forum.authkeyuserassociation': {\r
154             'Meta': {'object_name': 'AuthKeyUserAssociation'},\r
155             'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
156             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
157             'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),\r
158             'provider': ('django.db.models.fields.CharField', [], {'max_length': '64'}),\r
159             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_keys'", 'to': "orm['forum.User']"})\r
160         },\r
161         'forum.award': {\r
162             'Meta': {'unique_together': "(('content_type', 'object_id', 'user', 'badge'),)", 'object_name': 'Award', 'db_table': "u'award'"},\r
163             'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
164             'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['forum.Badge']"}),\r
165             'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),\r
166             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
167             'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
168             'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),\r
169             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'awards'", 'to': "orm['forum.User']"})\r
170         },\r
171         'forum.badge': {\r
172             'Meta': {'unique_together': "(('name', 'type'),)", 'object_name': 'Badge', 'db_table': "u'badge'"},\r
173             'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),\r
174             'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'through': "'Award'", 'to': "orm['forum.User']"}),\r
175             'description': ('django.db.models.fields.CharField', [], {'max_length': '300'}),\r
176             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
177             'multiple': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
178             'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),\r
179             'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '50', 'blank': 'True'}),\r
180             'type': ('django.db.models.fields.SmallIntegerField', [], {})\r
181         },\r
182         'forum.comment': {\r
183             'Meta': {'object_name': 'Comment', 'db_table': "u'comment'"},\r
184             'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
185             'comment': ('django.db.models.fields.CharField', [], {'max_length': '300'}),\r
186             'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
187             'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
188             'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_comments'", 'null': 'True', 'to': "orm['forum.User']"}),\r
189             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
190             'liked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'comments_liked'", 'through': "'LikedComment'", 'to': "orm['forum.User']"}),\r
191             'node': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'null': 'True', 'to': "orm['forum.Node']"}),\r
192             'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
193             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['forum.User']"})\r
194         },\r
195         'forum.favoritequestion': {\r
196             'Meta': {'unique_together': "(('question', 'user'),)", 'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},\r
197             'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
198             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
199             'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}),\r
200             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['forum.User']"})\r
201         },\r
202         'forum.flaggeditem': {\r
203             'Meta': {'object_name': 'FlaggedItem', 'db_table': "u'flagged_item'"},\r
204             'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
205             'flagged_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
206             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
207             'node': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'null': 'True', 'to': "orm['forum.Node']"}),\r
208             'reason': ('django.db.models.fields.CharField', [], {'max_length': '300', 'null': 'True'}),\r
209             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'flaggeditems'", 'to': "orm['forum.User']"})\r
210         },\r
211         'forum.keyvalue': {\r
212             'Meta': {'object_name': 'KeyValue'},\r
213             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
214             'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),\r
215             'value': ('forum.models.utils.PickledObjectField', [], {})\r
216         },\r
217         'forum.likedcomment': {\r
218             'Meta': {'object_name': 'LikedComment'},\r
219             'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
220             'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
221             'comment': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Comment']"}),\r
222             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
223             'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"})\r
224         },\r
225         'forum.markedtag': {\r
226             'Meta': {'object_name': 'MarkedTag'},\r
227             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
228             'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),\r
229             'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['forum.Tag']"}),\r
230             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['forum.User']"})\r
231         },\r
232         'forum.node': {\r
233             'Meta': {'object_name': 'Node'},\r
234             'active_revision': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'active'", 'unique': 'True', 'null': 'True', 'to': "orm['forum.NodeRevision']"}),\r
235             'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
236             'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nodes'", 'to': "orm['forum.User']"}),\r
237             'body': ('django.db.models.fields.TextField', [], {}),\r
238             'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),\r
239             'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
240             'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
241             'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_nodes'", 'null': 'True', 'to': "orm['forum.User']"}),\r
242             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
243             'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
244             'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_nodes'", 'null': 'True', 'to': "orm['forum.User']"}),\r
245             'node_type': ('django.db.models.fields.CharField', [], {'default': "'node'", 'max_length': '16'}),\r
246             'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),\r
247             'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'null': 'True', 'to': "orm['forum.Node']"}),\r
248             'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
249             'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),\r
250             'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'nodes'", 'to': "orm['forum.Tag']"}),\r
251             'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),\r
252             'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
253             'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'})\r
254         },\r
255         'forum.noderevision': {\r
256             'Meta': {'unique_together': "(('node', 'revision'),)", 'object_name': 'NodeRevision'},\r
257             'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'noderevisions'", 'to': "orm['forum.User']"}),\r
258             'body': ('django.db.models.fields.TextField', [], {}),\r
259             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
260             'node': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['forum.Node']"}),\r
261             'revised_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
262             'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),\r
263             'summary': ('django.db.models.fields.CharField', [], {'max_length': '300'}),\r
264             'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),\r
265             'title': ('django.db.models.fields.CharField', [], {'max_length': '300'})\r
266         },\r
267         'forum.question': {\r
268             'Meta': {'object_name': 'Question', 'db_table': "u'question'"},\r
269             'accepted_answer': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'question_accepting'", 'unique': 'True', 'null': 'True', 'to': "orm['forum.Answer']"}),\r
270             'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),\r
271             'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),\r
272             'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
273             'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
274             'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['forum.User']"}),\r
275             'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'through': "'FavoriteQuestion'", 'to': "orm['forum.User']"}),\r
276             'favourite_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
277             'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
278             'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['forum.User']"}),\r
279             'node_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['forum.Node']", 'unique': 'True'}),\r
280             'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subscriptions'", 'through': "'QuestionSubscription'", 'to': "orm['forum.User']"}),\r
281             'view_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
282             'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
283             'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})\r
284         },\r
285         'forum.questionsubscription': {\r
286             'Meta': {'object_name': 'QuestionSubscription'},\r
287             'auto_subscription': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
288             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
289             'last_view': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 16, 14, 19, 21, 765000)'}),\r
290             'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}),\r
291             'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"})\r
292         },\r
293         'forum.repute': {\r
294             'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},\r
295             'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
296             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
297             'node': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'null': 'True', 'to': "orm['forum.Node']"}),\r
298             'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.Question']"}),\r
299             'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),\r
300             'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
301             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'reputes'", 'to': "orm['forum.User']"}),\r
302             'user_previous_rep': ('django.db.models.fields.IntegerField', [], {'default': '0'}),\r
303             'value': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'})\r
304         },\r
305         'forum.subscriptionsettings': {\r
306             'Meta': {'object_name': 'SubscriptionSettings'},\r
307             'all_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
308             'all_questions_watched_tags': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
309             'enable_notifications': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
310             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
311             'member_joins': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),\r
312             'new_question': ('django.db.models.fields.CharField', [], {'default': "'d'", 'max_length': '1'}),\r
313             'new_question_watched_tags': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}),\r
314             'notify_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
315             'notify_answers': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
316             'notify_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
317             'notify_comments_own_post': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
318             'notify_reply_to_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
319             'questions_answered': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
320             'questions_asked': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),\r
321             'questions_commented': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
322             'questions_viewed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
323             'subscribed_questions': ('django.db.models.fields.CharField', [], {'default': "'i'", 'max_length': '1'}),\r
324             'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'subscription_settings'", 'unique': 'True', 'to': "orm['forum.User']"})\r
325         },\r
326         'forum.tag': {\r
327             'Meta': {'object_name': 'Tag', 'db_table': "u'tag'"},\r
328             'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['forum.User']"}),\r
329             'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
330             'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),\r
331             'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['forum.User']"}),\r
332             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
333             'marked_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'marked_tags'", 'through': "'MarkedTag'", 'to': "orm['forum.User']"}),\r
334             'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),\r
335             'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})\r
336         },\r
337         'forum.user': {\r
338             'Meta': {'object_name': 'User', '_ormbases': ['auth.User']},\r
339             'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),\r
340             'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),\r
341             'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),\r
342             'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
343             'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),\r
344             'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),\r
345             'hide_ignored_questions': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
346             'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
347             'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),\r
348             'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\r
349             'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),\r
350             'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),\r
351             'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),\r
352             'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),\r
353             'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}),\r
354             'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})\r
355         },\r
356         'forum.validationhash': {\r
357             'Meta': {'unique_together': "(('user', 'type'),)", 'object_name': 'ValidationHash'},\r
358             'expiration': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2010, 4, 17, 14, 19, 21, 837000)'}),\r
359             'hash_code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),\r
360             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
361             'seed': ('django.db.models.fields.CharField', [], {'max_length': '12'}),\r
362             'type': ('django.db.models.fields.CharField', [], {'max_length': '12'}),\r
363             'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forum.User']"})\r
364         },\r
365         'forum.vote': {\r
366             'Meta': {'object_name': 'Vote', 'db_table': "u'vote'"},\r
367             'canceled': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),\r
368             'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),\r
369             'node': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'null': 'True', 'to': "orm['forum.Node']"}),\r
370             'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['forum.User']"}),\r
371             'vote': ('django.db.models.fields.SmallIntegerField', [], {}),\r
372             'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})\r
373         }\r
374     }\r
375     \r
376     complete_apps = ['forum']\r