Created
November 3, 2016 07:05
-
-
Save rightx2/0a2521349026bc5c1d184d934740bcf1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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