django-ratings
A generic ratings module. The field itself appends two additional fields on the model, for optimization reasons. It adds <field>_score, and <field>_votes fields, which are both integer fields.
Installation
You will need to add djangoratings to your INSTALLED_APPS:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'djangoratings',
)
Finally, run python manage.py syncdb in your application’s directory to create the tables.
Setup your models
The way django-ratings is built requires you to attach a RatingField to your models. This field will create two columns, a votes column, and a score column. They will both be prefixed with your field name:
from djangoratings.fields import RatingField
class MyModel(models.Model):
rating = RatingField(range=5) # 5 possible rating values, 1-5
Alternatively you could do something like:
from djangoratings.fields import AnonymousRatingField
class MyModel(models.Model):
rating = AnonymousRatingField(range=10)
If you’d like to use the built-in weighting methods, to make it appear more difficult for an object to obtain a higher rating, you can use the weight kwarg:
class MyModel(models.Model):
rating = RatingField(range=10, weight=10)
RatingField allows the following options:
range = 2 - The range in which values are accepted. For example, a range of 2, says there are 2 possible vote scores.
can_change_vote = False - Allow the modification of votes that have already been made.
allow_delete = False - Allow the deletion of existent votes. Works only if can_change_vote = True
allow_anonymous = False - Whether to allow anonymous votes.
use_cookies = False - Use COOKIES to authenticate user votes. Works only if allow_anonymous = True.
Using the model API
And adding votes is also simple:
myinstance.rating.add(score=1, user=request.user, ip_address=request.META['REMOTE_ADDR'], request.COOKIES) # last param is optional - only if you use COOKIES-auth
Retrieving votes is just as easy:
myinstance.rating.get_rating_for_user(request.user, request.META['REMOTE_ADDR'], request.COOKIES) # last param is optional - only if you use COOKIES-auth
New You’re also able to delete existent votes (if deletion enabled):
myinstance.rating.delete(request.user, request.META['REMOTE_ADDR'], request.COOKIES) # last param is optional - only if you use COOKIES-auth
Accessing information about the rating of an object is also easy:
# these do not hit the database myinstance.rating.votes myinstance.rating.score
How you can order by top-rated using an algorithm (example from Nibbits.com source):
# In this example, ``rating`` is the attribute name for your ``RatingField``
qs = qs.extra(select={
'rating': '((100/%s*rating_score/(rating_votes+%s))+100)/2' % (MyModel.rating.range, MyModel.rating.weight)
})
qs = qs.order_by('-rating')
Get overall rating for your instance on a scale [0-range]:
myinstance.rating.get_rating()
Get recent ratings for your instance:
# This returns ``Vote`` instances. myinstance.rating.get_ratings()[0:5]
Get the percent of voters approval:
myinstance.rating.get_percent()
Get that same percentage, but excluding your weight:
myinstance.rating.get_real_percent()
Generic Views: Processing Votes
The best way to use the generic views is by extending it, or calling it within your own code:
from djangoratings.views import AddRatingFromModel
urlpatterns = patterns('',
url(r'rate-my-post/(?P<object_id>\d+)/(?P<score>\d+)/', AddRatingFromModel(), {
'app_label': 'blogs',
'model': 'post',
'field_name': 'rating',
}),
)
Another example, on Nibbits we use a basic API interface, and we simply call the AddRatingView within our own view:
from djangoratings.views import AddRatingView
# For the sake of this actually looking like documentation:
params = {
'content_type_id': 23,
'object_id': 34,
'field_name': 'ratings', # this should match the field name defined in your model
'score': 1, # the score value they're sending
}
response = AddRatingView()(request, **params)
if response.status_code == 200:
if response.content == 'Vote recorded.':
request.user.add_xp(settings.XP_BONUSES['submit-rating'])
return {'message': response.content, 'score': params['score']}
return {'error': 9, 'message': response.content}
Limit Votes Per IP Address
New in 0.3.5: There is now a setting, RATINGS_VOTES_PER_IP, to limit the number of unique IPs per object/rating-field combination. This is useful if you have issues with users registering multiple accounts to vote on a single object:
RATINGS_VOTES_PER_IP = 3
Metadata
Release files for django-ratings 0.3.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| django-ratings-0.3.7.tar.gz | 16.8 kB | Without provenance | Details |
Release files / django-ratings-0.3.7.tar.gz
| Download URL | django-ratings-0.3.7.tar.gz |
|---|---|
| Size | 16.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbae17d8f31fa974acc1df72df368d7acc9149cb7070f2d4f4e0a92a60641643
|
|
BLAKE2b-256 checksum How to use checksums |
48a19a3a0214d5a8786497653915f6eec9165b6f5c2c572b96977f1252a422dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for django-ratings 0.3.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.