Skip to content

Instantly share code, notes, and snippets.

@rightx2
Created November 3, 2016 07:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rightx2/0a2521349026bc5c1d184d934740bcf1 to your computer and use it in GitHub Desktop.
Save rightx2/0a2521349026bc5c1d184d934740bcf1 to your computer and use it in GitHub Desktop.
import random
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import DetailView
from django.views.generic.edit import FormMixin
from django.shortcuts import render, get_object_or_404, redirect
from django.core.urlresolvers import reverse
from products.models import Product
from items.forms import ItemForm
class ProductDetailView(DetailView, FormMixin):
model = Product
form_class = ItemForm
def get_success_url(self):
self.request.session['from_product'] = True
return reverse('orders:register_image')
def get_form(self, form_class=ItemForm):
return form_class(product=self.get_object(), **self.get_form_kwargs())
def get_context_data(self, **kwargs):
context = super(ProductDetailView, self).get_context_data(**kwargs)
product = self.get_object()
related_products = sorted(
Product.objects.related_products(product),
key=lambda x: random.random()
)[:3]
context['product'] = product
context['related_products'] = related_products
context['item_form'] = self.get_form()
return context
@method_decorator(login_required)
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
item = self.request.user.item_set.first()
if item:
item.delete()
form.save(user=self.request.user)
return super(ProductDetailView, self).form_valid(form)
def form_invalid(self, form):
self.object = self.get_object()
context = self.get_context_data()
context['item_form'] = self.get_form()
return self.render_to_response(context)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment