def form_valid( self, form ): features = form.cleaned_data['features'].split( ',' ) if form.cleaned_data['features'] else [] similar_films = form.cleaned_data['similar_films'] FilmFeatureVote.objects.filter( film=self.object, user=self.request.user ).delete() for t in features: FilmFeatureVote.objects.get_or_create( film=self.object, user=self.request.user, type=t ) SimilarFilm.remove_vote( user=self.request.user, film_a=self.object ) for sf in similar_films: SimilarFilm.add_vote( user=self.request.user, film_a=self.object, film_b=sf ) return self.render_to_response({ 'success': True, 'features': features })
def get_form_kwargs(self): def suggested(o): o.suggestion = True return o suggested_films = map( suggested, self.object.get_related_films()[:NUMBER_OF_SUGGESTED_SIMILAR_FILMS] ) if SUGGEST_SIMILAR_FILMS else [] kwargs = { 'initial': { 'features': ','.join([ str(v['type']) for v in FilmFeatureVote.objects.filter( user=self.request.user, film=self.object).values( 'type') ]), 'similar_films': SimilarFilm.user_votes(film=self.object, user=self.request.user) or suggested_films } } if self.request.method in ('POST', 'PUT'): kwargs.update({ 'data': self.request.POST, 'files': self.request.FILES, }) return kwargs
def get_context_data( self, *args, **kwargs ): context = super( EditFeaturesView, self ).get_context_data( *args, **kwargs ) context.update({ 'similar_films': SimilarFilm.get_similar( film=self.object ), 'features' : FilmFeature.objects.filter( film=self.object ), 'voted' : FilmFeature.objects.is_voted( self.object, self.request.user ), 'preview' : self.request.method == 'GET' and 'preview' in self.request.GET, 'edit' : self.request.method == 'GET' and 'edit' in self.request.GET, }) return context
def form_valid(self, form): features = form.cleaned_data['features'].split( ',') if form.cleaned_data['features'] else [] similar_films = form.cleaned_data['similar_films'] FilmFeatureVote.objects.filter(film=self.object, user=self.request.user).delete() for t in features: FilmFeatureVote.objects.get_or_create(film=self.object, user=self.request.user, type=t) SimilarFilm.remove_vote(user=self.request.user, film_a=self.object) for sf in similar_films: SimilarFilm.add_vote(user=self.request.user, film_a=self.object, film_b=sf) return self.render_to_response({'success': True, 'features': features})
def get_context_data(self, *args, **kwargs): context = super(EditFeaturesView, self).get_context_data(*args, **kwargs) context.update({ 'similar_films': SimilarFilm.get_similar(film=self.object), 'features': FilmFeature.objects.filter(film=self.object), 'voted': FilmFeature.objects.is_voted(self.object, self.request.user), 'preview': self.request.method == 'GET' and 'preview' in self.request.GET, 'edit': self.request.method == 'GET' and 'edit' in self.request.GET, }) return context
def get_form_kwargs( self ): def suggested( o ): o.suggestion = True return o suggested_films = map( suggested, self.object.get_related_films()[:NUMBER_OF_SUGGESTED_SIMILAR_FILMS] ) if SUGGEST_SIMILAR_FILMS else [] kwargs = { 'initial': { 'features': ','.join( [ str( v['type'] ) for v in FilmFeatureVote.objects.filter( user=self.request.user, film=self.object ).values( 'type' ) ] ), 'similar_films': SimilarFilm.user_votes( film=self.object, user=self.request.user ) or suggested_films } } if self.request.method in ('POST', 'PUT'): kwargs.update({ 'data': self.request.POST, 'files': self.request.FILES, }) return kwargs
def setUp(self): self.u1 = User.objects.create_user("user1", "*****@*****.**", "user") self.u2 = User.objects.create_user("user2", "*****@*****.**", "user") self.u3 = User.objects.create_user("user3", "*****@*****.**", "user") self.films = [] for i in range(10): f = Film.objects.create( permalink="test-film-%d" % i, title="title %2d" % i, type=Film.TYPE_FILM, release_year=2000, ) rating_helper.rate(self.u1, random.randint(1, 5), film_id=f.pk) rating_helper.rate(self.u2, random.randint(1, 5), film_id=f.pk) self.films.append(f) SimilarFilm.add_vote(self.u2, self.films[1], self.films[2]) SimilarFilm.add_vote(self.u3, self.films[2], self.films[1]) SimilarFilm.add_vote(self.u2, self.films[2], self.films[4]) rating_helper.rate(self.u3, 3, film_id=self.films[2].pk)
def setUp( self ): self.u1 = User.objects.create_user( "user1", "*****@*****.**", "user" ) self.u2 = User.objects.create_user( "user2", "*****@*****.**", "user" ) self.u3 = User.objects.create_user( "user3", "*****@*****.**", "user" ) self.films = [] for i in range(10): f = Film.objects.create( permalink="test-film-%d" % i, title="title %2d" % i, type=Film.TYPE_FILM, release_year=2000, ) rating_helper.rate( self.u1, random.randint( 1, 5 ), film_id=f.pk ) rating_helper.rate( self.u2, random.randint( 1, 5 ), film_id=f.pk ) self.films.append( f ) SimilarFilm.add_vote( self.u2, self.films[1], self.films[2] ) SimilarFilm.add_vote( self.u3, self.films[2], self.films[1] ) SimilarFilm.add_vote( self.u2, self.films[2], self.films[4] ) rating_helper.rate( self.u3, 3, film_id=self.films[2].pk )
def test_votes( self ): SimilarFilm.add_vote( user=self.u1, film_a=self.f1, film_b=self.f2 )#1 SimilarFilm.add_vote( user=self.u2, film_a=self.f1, film_b=self.f2 )#2 SimilarFilm.add_vote( user=self.u3, film_a=self.f1, film_b=self.f2 )#3 SimilarFilm.add_vote( user=self.u3, film_a=self.f2, film_b=self.f1 )#4 self.assertEqual( SimilarFilm.objects.filter( film_a=self.f1 ).count(), 1 ) similar = SimilarFilm.objects.get( film_a=self.f1 ) self.assertEqual( similar.number_of_votes, 3 ) SimilarFilm.remove_vote( user=self.u1, film_a=self.f1, film_b=self.f2 )#2 similar = SimilarFilm.objects.get( film_a=self.f1 ) self.assertEqual( similar.number_of_votes, 2 ) SimilarFilm.remove_vote( user=self.u2, film_a=self.f1, film_b=self.f2 )#1 similar = SimilarFilm.objects.get( film_a=self.f1 ) self.assertEqual( similar.number_of_votes, 1 ) SimilarFilm.remove_vote( user=self.u3, film_a=self.f1, film_b=self.f2 )#1 self.assertEqual( SimilarFilm.objects.filter( film_a=self.f1 ).count(), 0 )
def test_votes(self): SimilarFilm.add_vote(user=self.u1, film_a=self.f1, film_b=self.f2) #1 SimilarFilm.add_vote(user=self.u2, film_a=self.f1, film_b=self.f2) #2 SimilarFilm.add_vote(user=self.u3, film_a=self.f1, film_b=self.f2) #3 SimilarFilm.add_vote(user=self.u3, film_a=self.f2, film_b=self.f1) #4 self.assertEqual(SimilarFilm.objects.filter(film_a=self.f1).count(), 1) similar = SimilarFilm.objects.get(film_a=self.f1) self.assertEqual(similar.number_of_votes, 3) SimilarFilm.remove_vote(user=self.u1, film_a=self.f1, film_b=self.f2) #2 similar = SimilarFilm.objects.get(film_a=self.f1) self.assertEqual(similar.number_of_votes, 2) SimilarFilm.remove_vote(user=self.u2, film_a=self.f1, film_b=self.f2) #1 similar = SimilarFilm.objects.get(film_a=self.f1) self.assertEqual(similar.number_of_votes, 1) SimilarFilm.remove_vote(user=self.u3, film_a=self.f1, film_b=self.f2) #1 self.assertEqual(SimilarFilm.objects.filter(film_a=self.f1).count(), 0)