Skip to content

Commit 25264c8

Browse files
Fixed #122 -- BIG, BACKWARDS-INCOMPATIBLE CHANGE. Changed model syntax to use fieldname=FieldClass() syntax. See ModelSyntaxChangeInstructions for important information on how to change your models
git-svn-id: http://code.djangoproject.com/svn/django/trunk@549 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent aec0a73 commit 25264c8

36 files changed

+957
-721
lines changed

django/contrib/comments/models/comments.py

Lines changed: 101 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,56 @@
22
from django.models import auth, core
33

44
class Comment(meta.Model):
5-
db_table = 'comments'
6-
fields = (
7-
meta.ForeignKey(auth.User, raw_id_admin=True),
8-
meta.ForeignKey(core.ContentType, name='content_type_id', rel_name='content_type'),
9-
meta.IntegerField('object_id', 'object ID'),
10-
meta.CharField('headline', 'headline', maxlength=255, blank=True),
11-
meta.TextField('comment', 'comment', maxlength=3000),
12-
meta.PositiveSmallIntegerField('rating1', 'rating #1', blank=True, null=True),
13-
meta.PositiveSmallIntegerField('rating2', 'rating #2', blank=True, null=True),
14-
meta.PositiveSmallIntegerField('rating3', 'rating #3', blank=True, null=True),
15-
meta.PositiveSmallIntegerField('rating4', 'rating #4', blank=True, null=True),
16-
meta.PositiveSmallIntegerField('rating5', 'rating #5', blank=True, null=True),
17-
meta.PositiveSmallIntegerField('rating6', 'rating #6', blank=True, null=True),
18-
meta.PositiveSmallIntegerField('rating7', 'rating #7', blank=True, null=True),
19-
meta.PositiveSmallIntegerField('rating8', 'rating #8', blank=True, null=True),
20-
# This field designates whether to use this row's ratings in
21-
# aggregate functions (summaries). We need this because people are
22-
# allowed to post multiple review on the same thing, but the system
23-
# will only use the latest one (with valid_rating=True) in tallying
24-
# the reviews.
25-
meta.BooleanField('valid_rating', 'is valid rating'),
26-
meta.DateTimeField('submit_date', 'date/time submitted', auto_now_add=True),
27-
meta.BooleanField('is_public', 'is public'),
28-
meta.IPAddressField('ip_address', 'IP address', blank=True, null=True),
29-
meta.BooleanField('is_removed', 'is removed',
30-
help_text='Check this box if the comment is inappropriate. A "This comment has been removed" message will be displayed instead.'),
31-
meta.ForeignKey(core.Site),
32-
)
33-
module_constants = {
34-
# min. and max. allowed dimensions for photo resizing (in pixels)
35-
'MIN_PHOTO_DIMENSION': 5,
36-
'MAX_PHOTO_DIMENSION': 1000,
37-
38-
# option codes for comment-form hidden fields
39-
'PHOTOS_REQUIRED': 'pr',
40-
'PHOTOS_OPTIONAL': 'pa',
41-
'RATINGS_REQUIRED': 'rr',
42-
'RATINGS_OPTIONAL': 'ra',
43-
'IS_PUBLIC': 'ip',
44-
}
45-
ordering = ('-submit_date',)
46-
admin = meta.Admin(
47-
fields = (
48-
(None, {'fields': ('content_type_id', 'object_id', 'site_id')}),
49-
('Content', {'fields': ('user_id', 'headline', 'comment')}),
50-
('Ratings', {'fields': ('rating1', 'rating2', 'rating3', 'rating4', 'rating5', 'rating6', 'rating7', 'rating8', 'valid_rating')}),
51-
('Meta', {'fields': ('is_public', 'is_removed', 'ip_address')}),
52-
),
53-
list_display = ('user_id', 'submit_date', 'content_type_id', 'get_content_object'),
54-
list_filter = ('submit_date',),
55-
date_hierarchy = 'submit_date',
56-
search_fields = ('comment', 'user__username'),
57-
)
5+
user = meta.ForeignKey(auth.User, raw_id_admin=True)
6+
content_type = meta.ForeignKey(core.ContentType)
7+
object_id = meta.IntegerField('object ID')
8+
headline = meta.CharField(maxlength=255, blank=True)
9+
comment = meta.TextField(maxlength=3000)
10+
rating1 = meta.PositiveSmallIntegerField('rating #1', blank=True, null=True)
11+
rating2 = meta.PositiveSmallIntegerField('rating #2', blank=True, null=True)
12+
rating3 = meta.PositiveSmallIntegerField('rating #3', blank=True, null=True)
13+
rating4 = meta.PositiveSmallIntegerField('rating #4', blank=True, null=True)
14+
rating5 = meta.PositiveSmallIntegerField('rating #5', blank=True, null=True)
15+
rating6 = meta.PositiveSmallIntegerField('rating #6', blank=True, null=True)
16+
rating7 = meta.PositiveSmallIntegerField('rating #7', blank=True, null=True)
17+
rating8 = meta.PositiveSmallIntegerField('rating #8', blank=True, null=True)
18+
# This field designates whether to use this row's ratings in aggregate
19+
# functions (summaries). We need this because people are allowed to post
20+
# multiple reviews on the same thing, but the system will only use the
21+
# latest one (with valid_rating=True) in tallying the reviews.
22+
valid_rating = meta.BooleanField('is valid rating')
23+
submit_date = meta.DateTimeField('date/time submitted', auto_now_add=True)
24+
is_public = meta.BooleanField()
25+
ip_address = meta.IPAddressField('IP address', blank=True, null=True)
26+
is_removed = meta.BooleanField(help_text='Check this box if the comment is inappropriate. A "This comment has been removed" message will be displayed instead.')
27+
site = meta.ForeignKey(core.Site)
28+
class META:
29+
db_table = 'comments'
30+
module_constants = {
31+
# min. and max. allowed dimensions for photo resizing (in pixels)
32+
'MIN_PHOTO_DIMENSION': 5,
33+
'MAX_PHOTO_DIMENSION': 1000,
34+
35+
# option codes for comment-form hidden fields
36+
'PHOTOS_REQUIRED': 'pr',
37+
'PHOTOS_OPTIONAL': 'pa',
38+
'RATINGS_REQUIRED': 'rr',
39+
'RATINGS_OPTIONAL': 'ra',
40+
'IS_PUBLIC': 'ip',
41+
}
42+
ordering = ('-submit_date',)
43+
admin = meta.Admin(
44+
fields = (
45+
(None, {'fields': ('content_type', 'object_id', 'site')}),
46+
('Content', {'fields': ('user', 'headline', 'comment')}),
47+
('Ratings', {'fields': ('rating1', 'rating2', 'rating3', 'rating4', 'rating5', 'rating6', 'rating7', 'rating8', 'valid_rating')}),
48+
('Meta', {'fields': ('is_public', 'is_removed', 'ip_address')}),
49+
),
50+
list_display = ('user', 'submit_date', 'content_type', 'get_content_object'),
51+
list_filter = ('submit_date',),
52+
date_hierarchy = 'submit_date',
53+
search_fields = ('comment', 'user__username'),
54+
)
5855

5956
def __repr__(self):
6057
return "%s: %s..." % (self.get_user().username, self.comment[:100])
@@ -156,32 +153,31 @@ def _module_user_is_moderator(user):
156153
return False
157154

158155
class FreeComment(meta.Model):
159-
"A FreeComment is a comment by a non-registered user"
160-
db_table = 'comments_free'
161-
fields = (
162-
meta.ForeignKey(core.ContentType, name='content_type_id', rel_name='content_type'),
163-
meta.IntegerField('object_id', 'object ID'),
164-
meta.TextField('comment', 'comment', maxlength=3000),
165-
meta.CharField('person_name', "person's name", maxlength=50),
166-
meta.DateTimeField('submit_date', 'date/time submitted', auto_now_add=True),
167-
meta.BooleanField('is_public', 'is public'),
168-
meta.IPAddressField('ip_address', 'IP address'),
169-
# TODO: Change this to is_removed, like Comment
170-
meta.BooleanField('approved', 'approved by staff'),
171-
meta.ForeignKey(core.Site),
172-
)
173-
ordering = ('-submit_date',)
174-
admin = meta.Admin(
175-
fields = (
176-
(None, {'fields': ('content_type_id', 'object_id', 'site_id')}),
177-
('Content', {'fields': ('person_name', 'comment')}),
178-
('Meta', {'fields': ('submit_date', 'is_public', 'ip_address', 'approved')}),
179-
),
180-
list_display = ('person_name', 'submit_date', 'content_type_id', 'get_content_object'),
181-
list_filter = ('submit_date',),
182-
date_hierarchy = 'submit_date',
183-
search_fields = ('comment', 'person_name'),
184-
)
156+
# A FreeComment is a comment by a non-registered user.
157+
content_type = meta.ForeignKey(core.ContentType)
158+
object_id = meta.IntegerField('object ID')
159+
comment = meta.TextField(maxlength=3000)
160+
person_name = meta.CharField("person's name", maxlength=50)
161+
submit_date = meta.DateTimeField('date/time submitted', auto_now_add=True)
162+
is_public = meta.BooleanField()
163+
ip_address = meta.IPAddressField()
164+
# TODO: Change this to is_removed, like Comment
165+
approved = meta.BooleanField('approved by staff')
166+
site = meta.ForeignKey(core.Site)
167+
class META:
168+
db_table = 'comments_free'
169+
ordering = ('-submit_date',)
170+
admin = meta.Admin(
171+
fields = (
172+
(None, {'fields': ('content_type', 'object_id', 'site')}),
173+
('Content', {'fields': ('person_name', 'comment')}),
174+
('Meta', {'fields': ('submit_date', 'is_public', 'ip_address', 'approved')}),
175+
),
176+
list_display = ('person_name', 'submit_date', 'content_type', 'get_content_object'),
177+
list_filter = ('submit_date',),
178+
date_hierarchy = 'submit_date',
179+
search_fields = ('comment', 'person_name'),
180+
)
185181

186182
def __repr__(self):
187183
return "%s: %s..." % (self.person_name, self.comment[:100])
@@ -203,26 +199,25 @@ def get_content_object(self):
203199
get_content_object.short_description = 'Content object'
204200

205201
class KarmaScore(meta.Model):
206-
module_name = 'karma'
207-
fields = (
208-
meta.ForeignKey(auth.User),
209-
meta.ForeignKey(Comment),
210-
meta.SmallIntegerField('score', 'score', db_index=True),
211-
meta.DateTimeField('scored_date', 'date scored', auto_now=True),
212-
)
213-
unique_together = (('user_id', 'comment_id'),)
214-
module_constants = {
215-
# what users get if they don't have any karma
216-
'DEFAULT_KARMA': 5,
217-
'KARMA_NEEDED_BEFORE_DISPLAYED': 3,
218-
}
202+
user = meta.ForeignKey(auth.User)
203+
comment = meta.ForeignKey(Comment)
204+
score = meta.SmallIntegerField(db_index=True)
205+
scored_date = meta.DateTimeField(auto_now=True)
206+
class META:
207+
module_name = 'karma'
208+
unique_together = (('user', 'comment'),)
209+
module_constants = {
210+
# what users get if they don't have any karma
211+
'DEFAULT_KARMA': 5,
212+
'KARMA_NEEDED_BEFORE_DISPLAYED': 3,
213+
}
219214

220215
def __repr__(self):
221216
return "%d rating by %s" % (self.score, self.get_user())
222217

223218
def _module_vote(user_id, comment_id, score):
224219
try:
225-
karma = get_object(comment_id__exact=comment_id, user_id__exact=user_id)
220+
karma = get_object(comment__id__exact=comment_id, user__id__exact=user_id)
226221
except KarmaScoreDoesNotExist:
227222
karma = KarmaScore(None, user_id, comment_id, score, datetime.datetime.now())
228223
karma.save()
@@ -241,13 +236,12 @@ def _module_get_pretty_score(score):
241236
return int(round((4.5 * score) + 5.5))
242237

243238
class UserFlag(meta.Model):
244-
db_table = 'comments_user_flags'
245-
fields = (
246-
meta.ForeignKey(auth.User),
247-
meta.ForeignKey(Comment),
248-
meta.DateTimeField('flag_date', 'date flagged', auto_now_add=True),
249-
)
250-
unique_together = (('user_id', 'comment_id'),)
239+
user = meta.ForeignKey(auth.User)
240+
comment = meta.ForeignKey(Comment)
241+
flag_date = meta.DateTimeField(auto_now_add=True)
242+
class META:
243+
db_table = 'comments_user_flags'
244+
unique_together = (('user', 'comment'),)
251245

252246
def __repr__(self):
253247
return "Flag by %r" % self.get_user()
@@ -261,7 +255,7 @@ def _module_flag(comment, user):
261255
if int(comment.user_id) == int(user.id):
262256
return # A user can't flag his own comment. Fail silently.
263257
try:
264-
f = get_object(user_id__exact=user.id, comment_id__exact=comment.id)
258+
f = get_object(user__id__exact=user.id, comment__id__exact=comment.id)
265259
except UserFlagDoesNotExist:
266260
from django.core.mail import mail_managers
267261
f = UserFlag(None, user.id, comment.id, None)
@@ -270,13 +264,12 @@ def _module_flag(comment, user):
270264
f.save()
271265

272266
class ModeratorDeletion(meta.Model):
273-
db_table = 'comments_moderator_deletions'
274-
fields = (
275-
meta.ForeignKey(auth.User, verbose_name='moderator'),
276-
meta.ForeignKey(Comment),
277-
meta.DateTimeField('deletion_date', 'date deleted', auto_now_add=True),
278-
)
279-
unique_together = (('user_id', 'comment_id'),)
267+
user = meta.ForeignKey(auth.User, verbose_name='moderator')
268+
comment = meta.ForeignKey(Comment)
269+
deletion_date = meta.DateTimeField(auto_now_add=True)
270+
class META:
271+
db_table = 'comments_moderator_deletions'
272+
unique_together = (('user', 'comment'),)
280273

281274
def __repr__(self):
282275
return "Moderator deletion by %r" % self.get_user()

django/contrib/comments/templatetags/comments.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def render(self, context):
123123
self.obj_id = template.resolve_variable(self.context_var_name, context)
124124
comment_count = get_count_function(object_id__exact=self.obj_id,
125125
content_type__package__label__exact=self.package,
126-
content_type__python_module_name__exact=self.module, site_id__exact=SITE_ID)
126+
content_type__python_module_name__exact=self.module, site__id__exact=SITE_ID)
127127
context[self.var_name] = comment_count
128128
return ''
129129

@@ -146,7 +146,7 @@ def render(self, context):
146146
'object_id__exact': self.obj_id,
147147
'content_type__package__label__exact': self.package,
148148
'content_type__python_module_name__exact': self.module,
149-
'site_id__exact': SITE_ID,
149+
'site__id__exact': SITE_ID,
150150
'select_related': True,
151151
'order_by': (self.ordering + 'submit_date',),
152152
}

django/contrib/comments/views/comments.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ def get_comment(self, new_data):
8686
def save(self, new_data):
8787
today = datetime.date.today()
8888
c = self.get_comment(new_data)
89-
for old in comments.get_list(content_type_id__exact=new_data["content_type_id"],
90-
object_id__exact=new_data["object_id"], user_id__exact=self.get_user_id()):
89+
for old in comments.get_list(content_type__id__exact=new_data["content_type_id"],
90+
object_id__exact=new_data["object_id"], user__id__exact=self.get_user_id()):
9191
# Check that this comment isn't duplicate. (Sometimes people post
9292
# comments twice by mistake.) If it is, fail silently by pretending
9393
# the comment was posted successfully.
@@ -141,7 +141,7 @@ def save(self, new_data):
141141
# Check that this comment isn't duplicate. (Sometimes people post
142142
# comments twice by mistake.) If it is, fail silently by pretending
143143
# the comment was posted successfully.
144-
for old_comment in freecomments.get_list(content_type_id__exact=new_data["content_type_id"],
144+
for old_comment in freecomments.get_list(content_type__id__exact=new_data["content_type_id"],
145145
object_id__exact=new_data["object_id"], person_name__exact=new_data["person_name"],
146146
submit_date__year=today.year, submit_date__month=today.month,
147147
submit_date__day=today.day):

django/contrib/comments/views/userflags.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def flag(request, comment_id):
1616
the flagged `comments.comments` object
1717
"""
1818
try:
19-
comment = comments.get_object(pk=comment_id, site_id__exact=SITE_ID)
19+
comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID)
2020
except comments.CommentDoesNotExist:
2121
raise Http404
2222
if request.POST:
@@ -31,7 +31,7 @@ def flag(request, comment_id):
3131

3232
def flag_done(request, comment_id):
3333
try:
34-
comment = comments.get_object(pk=comment_id, site_id__exact=SITE_ID)
34+
comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID)
3535
except comments.CommentDoesNotExist:
3636
raise Http404
3737
t = template_loader.get_template('comments/flag_done')
@@ -50,7 +50,7 @@ def delete(request, comment_id):
5050
the flagged `comments.comments` object
5151
"""
5252
try:
53-
comment = comments.get_object(pk=comment_id, site_id__exact=SITE_ID)
53+
comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID)
5454
except comments.CommentDoesNotExist:
5555
raise Http404
5656
if not comments.user_is_moderator(request.user):
@@ -72,7 +72,7 @@ def delete(request, comment_id):
7272

7373
def delete_done(request, comment_id):
7474
try:
75-
comment = comments.get_object(pk=comment_id, site_id__exact=SITE_ID)
75+
comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID)
7676
except comments.CommentDoesNotExist:
7777
raise Http404
7878
t = template_loader.get_template('comments/delete_done')

0 commit comments

Comments
 (0)