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)
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")
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)
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)
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)
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, })
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)
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)
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() })
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)
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