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