Example #1
0
def show_product_view(request, section_slug, product_slug):
    template = 'app/phone.html'
    try:
        section = Section.objects.get(slug=section_slug)
        product_data = Product.objects.prefetch_related('reviews').get(
            section=section, slug=product_slug)

        if request.method == 'POST':
            form = ReviewForm(request.POST)
            if form.is_valid():
                text = form.cleaned_data['description']
                rating = form.cleaned_data['mark']
                author = form.cleaned_data['name']
                new_review = Review.objects.create(text=text,
                                                   rating=rating,
                                                   author=author,
                                                   product=product_data)
                ReviewProductRelation.objects.create(product=product_data,
                                                     review=new_review)
                form = ReviewForm({'name': request.user.first_name})
        else:
            form = ReviewForm({'name': request.user.first_name})
        reviews = product_data.reviews.all().order_by('-id')
        context = {
            'product_data': product_data,
            'reviews': reviews,
            'form': form
        }
    except ObjectDoesNotExist:
        context = {}

    return render(request, template, context)
Example #2
0
def movie(request, pk):
    if request.method == 'POST':
        movie = Movie.objects.get(pk=pk)
        form_obj = ReviewForm(request.POST)
        if form_obj.is_valid():
            db_obj = form_obj.save(commit=False)
            db_obj.movie = movie
            if request.user.is_authenticated():
                db_obj.added_by = request.user
            db_obj.save()
            pk_value = db_obj.pk
            return HttpResponseRedirect(reverse('movie_detail', args=(pk, )))
        else:
            reviews = paginate_reviews(request, movie)
            return render(request, 'movie.html', {
                'movie': movie,
                'form': form,
                'reviews': reviews
            })
    elif request.method == 'GET':
        movie = Movie.objects.get(pk=pk)
        form = ReviewForm()
        reviews = paginate_reviews(request, movie)
        return render(request, 'movie.html', {
            'movie': movie,
            'form': form,
            'reviews': reviews
        })
    else:
        raise Http404("Request method type not defined")
Example #3
0
def good_view(request):
    sections = Section.objects.all()
    template = 'app/good.html'
    good = ''
    reviews = ''

    review_left = request.COOKIES.get('review_left')
    if review_left:
        review_left = review_left.replace(r"'", r'"')
        review_left = json.loads(review_left)
        review_list = review_left["you_reviews"]
    else:
        review_list = []
        review_left = {"you_reviews": review_list}
    if request.method == 'POST':
        fb_id = request.GET.get('feedback')
        response = HttpResponseRedirect(f'/good/?id={fb_id}')
        if fb_id and not fb_id in review_list:
            review_form = ReviewForm(request.POST or None)
            if review_form.is_valid():
                name = review_form.cleaned_data.get('name')
                text = review_form.cleaned_data.get('text')
                rating = review_form.cleaned_data.get('rating')
                product = Product.objects.filter(id=int(fb_id))[0]
            new_feedback = Review(name=name,
                                  text=text,
                                  rating=rating,
                                  product=product)
            new_feedback.save()
            review_list.append(int(fb_id))
            print('review_list=', review_list)
            review_left["you_reviews"] = review_list
            review_left = json.dumps(review_left)
            response.set_cookie('review_left', review_left)
            return response

    id = request.GET.get('id')
    if id:
        good = Product.objects.filter(id=int(id))[0]
        if good:
            reviews = Review.objects.filter(product=int(id))
    if good.id in review_left['you_reviews']:
        review_left = True
    else:
        review_left = False
    print('review_left=', review_left, type(review_left))
    form = ReviewForm()
    context = {
        'sections': sections,
        'good': good,
        'reviews': reviews,
        'review_left': review_left,
        'form': form,
    }
    return render(request, template_name=template, context=context)
Example #4
0
    def post(self, request, pk=None) :
        reviewer = get_object_or_404(Reviewer, reviewer=request.user)
        review = get_object_or_404(Review, review_id=pk, reviewer=reviewer)
        review_rate = float(review.stars)
        form = ReviewForm(request.POST, request.FILES or None, instance=review)

        if not form.is_valid() :
            ctx = {'form' : form}
            return render(request, self.template, ctx)

        review = form.save(commit=False)
        review.save()
        f = get_object_or_404(App, app_id=review.app.app_id)
        length = len(f.review_set.all())
        f.rating = str((float(f.rating)*length-review_rate+float(review.stars))/length)
        f.save()

        return redirect(self.success_url)
Example #5
0
def show_product_view(request, section_slug,
                      product_slug):  # показ информации и отзывы о товаре
    template = 'app/product.html'  # шаблон информации о товаре
    try:
        section = Section.objects.get(slug=section_slug)  # получение раздела
        product_data = Product.objects.prefetch_related('reviews').get(
            section=section, slug=product_slug)  # получение товаров раздела

        if request.method == 'POST':  # если метод POST
            form = ReviewForm(
                request.POST)  # берем форму отзывов у конкретного товара
            if form.is_valid(
            ):  # проверяет данные формы и возвращает True, если данные корректны
                text = form.cleaned_data[
                    'description']  # правильно обрабатывает введенные в поле данные
                rating = form.cleaned_data['mark']
                author = form.cleaned_data['name']
                new_review = Review.objects.create(
                    text=text,
                    rating=rating,
                    author=author,
                    product=product_data)  # создать новый отзыв
                ReviewProductRelation.objects.create(product=product_data,
                                                     review=new_review)
                form = ReviewForm(
                    {'name': request.user.first_name}
                )  # поле Имя в форме автоматически заполняется как имя пользователя
        else:  # если метод не POST
            form = ReviewForm(
                {'name': request.user.first_name}
            )  # поле Имя в форме автоматически заполняется как имя пользователя
        reviews = product_data.reviews.all().order_by(
            '-id')  # получить отзывы о товаре сортируя по id
        context = {
            'product_data': product_data,
            'reviews': reviews,
            'form': form
        }
    except ObjectDoesNotExist:  # если обьектов нет
        context = {}

    return render(request, template, context)
Example #6
0
def review(request):
    review_form = ReviewForm()
    if request.method == "POST":
        review_form = ReviewForm(request.POST)
        if review_form.is_valid():
            new_review = review_form.save(commit=False)
            new_review.user_name = request.user.username
            new_review.save()
            return redirect(review)
    SaitReviews = Review.objects.all()
    assert isinstance(request, HttpRequest)
    return render(
        request, 'app/review.html', {
            'title': 'Отзыв',
            'review_form': review_form,
            'SaitReviews': SaitReviews,
            'message':
            'Если вам понравился сайт, вы можете оставить свой отзыв о проделанной мною работе',
            'year': datetime.now().year,
        })
Example #7
0
def product_view(request, pk):
    template_name = 'app/phone.html'
    product = get_object_or_404(Product, id=pk)
    reviews = Review.objects.filter(product=product.id)

    if request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            cleaned_data = form.cleaned_data
            Review.objects.create(mark=cleaned_data['mark'],
                                  name=cleaned_data['name'],
                                  content=cleaned_data['content'],
                                  product=product)
        else:
            print(form.errors)
    context = {
        'form': ReviewForm,
        'reviews': reviews,
        'product': product,
    }
    return render(request, template_name, context)
Example #8
0
def product_detail_view(request, *args, **kwargs):
    context = {}
    slug = kwargs['slug']
    product = get_object_or_404(Product, slug=slug)
    context['product'] = product

    form = ReviewForm(request.POST or None)
    context['form'] = form

    if form.is_valid():
        new_review = Review()
        new_review.user = request.user
        new_review.rating = int(form.cleaned_data['rating'])
        new_review.save()
        new_review.product.add(product)
        new_review.save()
        new_review.text = form.cleaned_data['text']
        new_review.save()

    context['reviews'] = Product.objects.get(slug=slug)
    return render(request, 'app/product_detail.html', context)
Example #9
0
def review_pending_article(request, article_id):
    reviewed_article = get_object_or_404(Article, id=article_id)
    if request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            new_comment = form.cleaned_data['new_comment']
            if form.cleaned_data['approval'] == 'approve':
                reviewed_article.state = STAGE_ACCEPTED
            else:
                reviewed_article.state = STAGE_REJECTED
            reviewed_article.save()
            if new_comment:
                c = EditorNote(article=reviewed_article, text=new_comment)
                c.save()
            return HttpResponseRedirect(reverse('article-list'))
    else:
        form = ReviewForm()
        return render(
            request, 'editor/review-article.html', {
                'form': form,
                'article': reviewed_article,
                'comments': reviewed_article.Editornotes.all()
            })
Example #10
0
def hotel_detail(request, id, slug):
    template = 'app/listing-single.html'
    hotel = get_object_or_404(Hotel, id=id, slug=slug)
    # cities = get_object_or_404(Hotel, city=city)
    hotels = Hotel.published.all()
    # room = Room.objects.all()
    # rooms = room.filter(hotel=id)
    cart_hotel_form = CartAddHotelForm()
    posts = Post.published.order_by('-publish')[:3]

    reviews = hotel.reviews.filter(active=True)
    new_review = None

    total = Reviews.objects.all().filter(hotel=hotel)
    try:
        avg = {
            "over_all": 0,
            'cleanliness': 0,
            'comfort': 0,
            'staff': 0,
            'facilities': 0
        }
        m = 0
        for i in total:
            m += 1
            avg['cleanliness'] += i.cleanliness
            avg['comfort'] += i.comfort
            avg['staff'] += i.staff
            avg['facilities'] += i.facilities
            avg['over_all'] += i.over_all
        avg = {
            "over_all": avg['over_all'] / m,
            'cleanliness': avg['cleanliness'] / m,
            'comfort': avg['comfort'] / m,
            'staff': avg['staff'] / m,
            'facilities': avg['facilities'] / m
        }
        avg_bar = {
            'cleanliness': avg['cleanliness'] * 20,
            'comfort': avg['comfort'] * 20,
            'staff': avg['staff'] * 20,
            'facilities': avg['facilities'] * 20
        }
    except ZeroDivisionError as ze:
        avg = {
            "over_all": 0,
            'cleanliness': 0,
            'comfort': 0,
            'staff': 0,
            'facilities': 0
        }
        avg_bar = {
            "over_all": 0,
            'cleanliness': 0,
            'comfort': 0,
            'staff': 0,
            'facilities': 0
        }

    if request.method == 'POST':
        # A comment was posted
        review_form = ReviewForm(data=request.POST)
        if review_form.is_valid():
            # Create Comment object but don't save to database yet
            new_review = review_form.save(commit=False)
            # Assign the current post to the comment
            new_review.hotel = hotel
            # Save the comment to the database
            new_review.save()
    else:
        review_form = ReviewForm()

    r = Recommender()
    recommended_hotels = r.suggest_hotels_for([hotel], 4)

    context = {
        'hotel': hotel,
        "city_list": hotels,
        'cart_hotel_form': cart_hotel_form,
        'reviews': reviews,
        'new_review': new_review,
        'review_form': review_form,
        'avg': avg,
        'avg_bar': avg_bar,
        'recommended_hotels': recommended_hotels,
        "posts": posts
    }
    return render(request, template, context)
Example #11
0
    def get_object(self, *args, **kwargs):
        request = self.request
        pk = self.kwargs.get('pk')
        slug = self.kwargs.get('slug')

        instance = Hotel.published.get_by_id(pk, slug)
        instance['reviews'] = instance.reviews.filter(active=True)
        instance['new_review'] = None

        total = Reviews.objects.all().filter(pk)

        try:
            avg = {
                "over_all": 0,
                'cleanliness': 0,
                'comfort': 0,
                'staff': 0,
                'facilities': 0
            }
            m = 0
            for i in total:
                m += 1
                avg['cleanliness'] += i.cleanliness
                avg['comfort'] += i.comfort
                avg['staff'] += i.staff
                avg['facilities'] += i.facilities
                avg['over_all'] += i.over_all
            avg = {
                "over_all": avg['over_all'] / m,
                'cleanliness': avg['cleanliness'] / m,
                'comfort': avg['comfort'] / m,
                'staff': avg['staff'] / m,
                'facilities': avg['facilities'] / m
            }
            instance['avg_bar'] = {
                'cleanliness': avg['cleanliness'] * 20,
                'comfort': avg['comfort'] * 20,
                'staff': avg['staff'] * 20,
                'facilities': avg['facilities'] * 20
            }
        except ZeroDivisionError as ze:
            instance['avg'] = {
                "over_all": 0,
                'cleanliness': 0,
                'comfort': 0,
                'staff': 0,
                'facilities': 0
            }
            instance['avg_bar'] = {
                "over_all": 0,
                'cleanliness': 0,
                'comfort': 0,
                'staff': 0,
                'facilities': 0
            }

        if request.method == 'POST':
            # A comment was posted
            review_form = ReviewForm(data=request.POST)
            if review_form.is_valid():
                # Create Comment object but don't save to database yet
                new_review = review_form.save(commit=False)
                # Assign the current post to the comment
                new_review.hotel = instance
                # Save the comment to the database
                new_review.save()
        else:
            instance['review_form'] = ReviewForm()

        if instance is None:
            raise Http404("Hotel doesn't exist")
        return instance