Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Simple youtube like up and down rating app for Django.
Python
branch: master

README.rst

django-updown

Travis CI build status

django-updown is a simple Django application for adding youtube like up and down voting.

Changelog

0.5:

  • Fixed DateTimeField RuntimeWarning (thanks to yurtaev)
  • Tests are using Django 1.4.10 now

0.4:

  • Usage of AUTH_USER_MODEL instead of auth.models.User (thanks to timbutler)

0.3:

  • Removed south as dependency
  • Small cleanups (thanks to gwrtheyrn)

0.2:

  • Updated related_name to avoid namespace clashes.
  • Added south as dependency

Usage

Add "updown" to your INSTALLED_APPS then just add a RatingField to your existing model and go:

from django.db import models
from updown.fields import RatingField

class Video(models.Model):
    # ...other fields...
    rating = RatingField()

You can also allow the user to change his vote:

class Video(models.Model):
    # ...other fields...
    rating = RatingField(can_change_vote=True)

Now you can write your own view to submit ratings or use the predefinded:

from updown.views import AddRatingFromModel

urlpatterns = patterns("",
    url(r"^(?P<object_id>\d+)/rate/(?P<score>[\d\-]+)$", AddRatingFromModel(), {
        'app_label': 'video',
        'model': 'Video',
        'field_name': 'rating',
    }, name="video_rating"),
)

To submit a vote just go to video/<id>/rate/(1|-1). If you allowed users to change they're vote, they can do it with the same url.

If you're using Django version prior to 1.5, you have to add AUTH_USER_MODEL = 'auth.User' to your settings.

Troubleshooting

If you previously used this app you may get to a point where migrations are failing. Try:

./manage.py migrate updown --fake 0001

to skip the initial migration. After this apply the migrations again:

./manage.py migrate updown

Thanks

Thanks a lot to django-ratings for the inspiring code

Something went wrong with that request. Please try again.