Beispiel #1
0
    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 })
Beispiel #2
0
    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
Beispiel #3
0
 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
Beispiel #4
0
    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})
Beispiel #5
0
 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
Beispiel #6
0
    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
Beispiel #7
0
    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)
Beispiel #8
0
    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 )
Beispiel #10
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)