views.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. from django.shortcuts import render
  2. from django.views import generic
  3. from django.views.generic import TemplateView
  4. from django.views.generic.edit import *
  5. from marktplatz.models import *
  6. from django.db import models
  7. from django.contrib.auth.models import User
  8. from django.contrib.auth.mixins import LoginRequiredMixin
  9. from django.core import serializers
  10. from django.core.mail import send_mail
  11. from django.contrib.auth.decorators import login_required
  12. from django.contrib.auth.models import User, Group
  13. from django.http import HttpResponseRedirect
  14. from django.urls import reverse, reverse_lazy
  15. from django.core.files import File
  16. from django.http import HttpResponse
  17. from django.views.generic import FormView
  18. from django.contrib.auth import login, authenticate
  19. from django.shortcuts import render, redirect
  20. from django.forms import formset_factory
  21. from django.forms import BaseModelFormSet
  22. from django.forms import modelformset_factory, inlineformset_factory
  23. from .forms import LinkFormSet, LinkForm, FormsetHelper, MediaFormsetHelper, MediaFormSet
  24. from django.contrib import messages
  25. from django_file_form.uploader import FileFormUploader
  26. from django_countries import countries
  27. from django.template import Context, Template
  28. from django.conf import settings
  29. from constance import config
  30. from django.http import Http404
  31. from django.db.models import Count
  32. from PIL import Image
  33. from PIL import ImageFont
  34. from PIL import ImageDraw
  35. from django.db.models import Q
  36. from django.shortcuts import get_list_or_404, get_object_or_404
  37. from .forms import RegisterForm, SignUpForm, DescriptionForm,SubmissionForm,CreditForm,DescriptionForm,InteractionForm,LinkForm,MediaForm,VideoForm, MediaForm_test, MediaForm1, MediaForm2
  38. import os
  39. import itertools
  40. from PIL import Image
  41. import json
  42. import copy
  43. import csv
  44. # Create your views here.
  45. def index(request):
  46. context = {}
  47. return render(request, 'index.html', context = context)
  48. def about(request):
  49. context = {}
  50. context = {'about_text': Template(config.ABOUT_CONTENT).render(Context(context))}
  51. return render(request, 'marktplatz/about.html', context)
  52. #template = Template( config.ABOUT_CONTENT )
  53. #return HttpResponse( template.render( Context(context) ) )
  54. #return render(request, rendered , context = context)
  55. def submit(request):
  56. context = {}
  57. context = {'submit_text': Template(config.SUBMIT_TEXT).render(Context(context))}
  58. return render(request,'marktplatz/submit.html', context)
  59. def error_404_view(request, exception):
  60. data = {"name": "ThePythonDjango.com"}
  61. return render(request,'marktplatz/error_404.html', data)
  62. @login_required
  63. def home(request):
  64. user = request.user
  65. if user.groups.filter(name='submission').exists():
  66. return HttpResponseRedirect(reverse('my-products'))
  67. else:
  68. return HttpResponseRedirect(reverse('products'))
  69. class SearchAgentCreate(CreateView):
  70. model = SearchAgent
  71. template_name = 'marktplatz/form.html'
  72. fields = 'ort', 'email'
  73. success_url = reverse_lazy('products')
  74. class SearchAgentDelete(DeleteView):
  75. model = SearchAgent
  76. template_name = 'marktplatz/form.html'
  77. success_url = reverse_lazy('products')
  78. def get(self, request, *args, **kwargs):
  79. searchagent = SearchAgent.objects.get(pk= kwargs.get('pk') )
  80. context = request.GET.dict()
  81. if searchagent.hash == kwargs.get('hash'):
  82. context['form_content'] = 'Dein Suchagent wurde gelöscht!'
  83. print ("delete")
  84. return render(request, self.template_name, context )
  85. # super().get(self, request, *args, **kwargs)
  86. else:
  87. print ("not delete")
  88. context['form_content'] = 'Oopala, das hat nicht geklappt.'
  89. return render(request, self.template_name, context )
  90. class ProductsView(generic.ListView):
  91. model = Wohnprojekt
  92. #context_object_name = 'Products'
  93. # show the best 4 website finish
  94. def get_queryset(self):
  95. # original qs
  96. qs = super().get_queryset()
  97. self.user = self.request.user
  98. user = self.user
  99. # if user.groups.filter(name='jury').exists():
  100. # return qs.filter(sumbitted = config.CURRENT_EVENT)
  101. qs = qs.order_by('frei')
  102. if user.groups.filter(name='submission').exists():
  103. contact = Contact.objects.get(user=user)
  104. return qs.filter(contact = contact)
  105. if user.is_superuser:
  106. return qs
  107. return qs.filter(public = True)
  108. def get_context_data(self, **kwargs):
  109. context = super().get_context_data(**kwargs)
  110. user =self.request.user
  111. context['user'] = user
  112. used_countries = []
  113. orts = {}
  114. years = {''}
  115. for product in context['wohnprojekt_list']:
  116. if not years.__contains__(product.year):
  117. years.add(product.year)
  118. for country in product.country:
  119. if not used_countries.__contains__(country):
  120. used_countries.append(country)
  121. # if not used_orts.__contains__( product.get_ort_display() ):
  122. if not product.ort in orts:
  123. orts[product.ort] = product.get_ort_display()
  124. years.remove('')
  125. context['year_list'] = years
  126. context['count_list'] = used_countries
  127. context['frei_list'] = Product.FREI
  128. context['status_list'] = Product.STATUS
  129. context['ort_dict'] = orts
  130. context['altneu_list'] = Wohnprojekt.ALTNEU
  131. context['sponsor_cards'] = Template( config.SPONSOR_CARDS ).render( Context(context) )
  132. context['main_card'] = Template( config.MAIN_CARD ).render( Context(context) )
  133. return context
  134. template_name = 'marktplatz/product_overview.html'
  135. class DetailView(generic.DetailView):
  136. model = Product
  137. template_name = 'marktplatz/product_detail.html'
  138. embed = False
  139. def get_context_data(self, **kwargs):
  140. # context = super().get_context_data(**kwargs)
  141. if self.embed :
  142. kwargs['embed'] = True
  143. # context['credits'] = Credit.objects.select_related().get(product = self.kwargs['pk'])
  144. # context['descriptions'] = Description.objects.select_related().get(product = self.kwargs['pk'])
  145. # context['interactions'] = Interaction.objects.select_related().get(product=self.kwargs['pk'])
  146. # context['PAUI'] = Category.objects.get(short_name='PAUI')
  147. # context['wohnprojekt'] = self.object.wohnprojekt
  148. # print (context)
  149. # print (context['object'])
  150. # print (context['product'])
  151. return super().get_context_data(**kwargs)
  152. def post(self, request, *args, **kwargs):
  153. vote = int(request.POST['vote'])
  154. comment = str(request.POST['comment'])
  155. if vote <= 10:
  156. try:
  157. get_vote = Vote.objects.get(juryMember=self.request.user, product=self.kwargs['pk'])
  158. get_vote.vote = vote
  159. get_vote.comment = comment
  160. get_vote.save()
  161. except Vote.DoesNotExist:
  162. get_vote = Vote(product = Product.objects.get(pk=self.kwargs['pk']), juryMember= self.request.user, vote = vote, comment=comment)
  163. get_vote.save()
  164. else:
  165. return HttpResponseRedirect(request.path)
  166. return HttpResponseRedirect(reverse('products'))
  167. class VoteView(LoginRequiredMixin, generic.ListView):
  168. model = Product
  169. template_name='marktplatz/voteDetail.html'
  170. def get_context_data(self, **kwargs):
  171. context = super().get_context_data(**kwargs)
  172. context['user'] = User.objects.filter(groups__name='JuryMembers')
  173. return context
  174. class CidView(LoginRequiredMixin, generic.ListView):
  175. model = Product
  176. template_name='marktplatz/votes_cid.html'
  177. def get_context_data(self, **kwargs):
  178. context = super().get_context_data(**kwargs)
  179. return context
  180. def post(self, request, *args, **kwargs):
  181. for pk in request.POST.dict():
  182. if not 'csrfmiddlewaretoken' in pk:
  183. if request.POST[pk] != '' and ('cid' in pk):
  184. now_product = Product.objects.get(pk=pk.split('.')[0])
  185. now_product.class_cid = request.POST[pk]
  186. now_product.save()
  187. if request.POST[pk] != '' and ('sub' in pk):
  188. now_product = Product.objects.get(pk=pk.split('.')[0])
  189. now_product.sumbitted = request.POST[pk]
  190. now_product.save()
  191. return HttpResponseRedirect('')
  192. class AdminView(LoginRequiredMixin, generic.ListView):
  193. model = Product
  194. template_name='marktplatz/admin_panel.html'
  195. def get_context_data(self, **kwargs):
  196. context = super().get_context_data(**kwargs)
  197. return context
  198. def post(self, request, *args, **kwargs):
  199. # print (request.POST.dict())
  200. context = request.POST.dict()
  201. public = {k: v for k, v in context.items() if k.startswith('product_p')}
  202. for elemk in public:
  203. # print(elemk + " - " + public[elemk] )
  204. keys = elemk.split(".")
  205. current_product = Product.objects.get(pk=keys[1])
  206. if public[elemk] == 'true':
  207. current_product.public = True
  208. current_product.save()
  209. else:
  210. current_product.public = False
  211. current_product.save()
  212. edit = {k: v for k, v in context.items() if k.startswith('product_e')}
  213. # print (edit)
  214. for elemk in edit:
  215. # print(elemk + " - " + edit[elemk] )
  216. keys = elemk.split(".")
  217. current_product = Product.objects.get(pk=keys[1])
  218. if edit[elemk] == 'true':
  219. current_product.edit = True
  220. current_product.save()
  221. else:
  222. current_product.edit = False
  223. current_product.save()
  224. return HttpResponseRedirect('')
  225. class lightboximg(LoginRequiredMixin, TemplateView):
  226. template_name = "marktplatz/importold.html"
  227. def post(self, request):
  228. context = {'faild': ''}
  229. faild = ''
  230. from1 = int(request.POST['from'])
  231. to = int(request.POST['to'])
  232. products = Product.objects.all()
  233. i = 0
  234. for product in products:
  235. i+=1
  236. if (i < from1):
  237. continue
  238. if (i > to):
  239. break
  240. medias = product.media_set.all()
  241. for oldmedia in medias:
  242. if not oldmedia.image_norm:
  243. oldpic = oldmedia.image
  244. oldmedia.image_norm.save(oldmedia.filename() + '_norm', oldpic)
  245. oldmedia.save
  246. return render(request, self.template_name, context)
  247. def get(self, request):
  248. context = {'faild': ''}
  249. faild = ''
  250. context['faild'] = faild
  251. return render(request, self.template_name, context)
  252. class registerView(FormView):
  253. template_name = 'marktplatz/form.html'
  254. #form_class = RegisterForm
  255. def get(self, request):
  256. #form = self.form_class()
  257. context = request.GET.dict()
  258. context['form'] = RegisterForm
  259. context['signUp'] = SignUpForm
  260. return render(request, self.template_name, context)
  261. def post(self, request):
  262. # print ( request.POST.dict() )
  263. form = SignUpForm(request.POST)
  264. form_contact = RegisterForm(request.POST)
  265. #
  266. # Filter existing emails
  267. #
  268. qs = Contact.objects.filter( email=form_contact.data['email'] )
  269. if ( qs.count() ):
  270. form_contact.add_error('email', "Email already in use, please reset your password.")
  271. if form.is_valid() and form_contact.is_valid():
  272. print (form.cleaned_data)
  273. print (form_contact.cleaned_data)
  274. contact = form_contact.save(commit=False)
  275. user = form.save()
  276. user.email = contact.email
  277. user.first_name = contact.first_name
  278. user.last_name = contact.last_name
  279. user.set_password(form.cleaned_data.get('password1'))
  280. user.save()
  281. contact.user = user
  282. contact.save()
  283. username = form.cleaned_data.get('username')
  284. raw_password = form.cleaned_data.get('password1')
  285. group = Group.objects.get(name='submission')
  286. group.user_set.add(user)
  287. user = authenticate(username=username, password=raw_password)
  288. if user is not None:
  289. # A backend authenticated the credentials
  290. login(request, user)
  291. return redirect('products')
  292. else:
  293. # No backend authenticated the credentials
  294. send_mail(
  295. 'error with auth',
  296. 'Error in authorization.' + json.dumps( request.POST.dict() ),
  297. 'awards@berta.mediaarchitecture.org',
  298. ['juan@mediaarchitecture.org'],
  299. fail_silently=False,
  300. )
  301. return redirect('products')
  302. login(request, user)
  303. else:
  304. print (form.errors)
  305. print (form_contact.errors)
  306. send_mail(
  307. 'error with auth',
  308. 'Error in forms. \n\n form.errors: \n\n' + json.dumps(form.errors) + '\n\n form_contact.errors: \n\n' + json.dumps(form_contact.errors),
  309. 'awards@berta.mediaarchitecture.org',
  310. ['juan@mediaarchitecture.org'],
  311. fail_silently=False,
  312. )
  313. context = request.POST.dict()
  314. context['signUp'] = form
  315. context['form'] = form_contact
  316. context['signup_errors'] = form.errors
  317. context['contact_errors'] = form_contact.errors
  318. return render(request, self.template_name, context)
  319. context = request.GET.dict()
  320. context['form'] = RegisterForm
  321. context['signUp'] = SignUpForm
  322. return render(request, self.template_name, context)
  323. class NewSubmitView(LoginRequiredMixin, FormView):
  324. use_ajax = True
  325. template_name = 'marktplatz/add.html'
  326. model = Product
  327. def get(self, request,*args, **kwargs):
  328. # form = self.form_class()
  329. context = request.GET.dict()
  330. context['product'] = SubmissionForm
  331. # context['lnks'] = LinkFormSet
  332. # context['lnks_helper'] = FormsetHelper()
  333. context['use_ajax'] = True
  334. context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
  335. return render(request, self.template_name, context)
  336. def post(self, request):
  337. product_f = SubmissionForm(request.POST, request.FILES)
  338. if product_f.is_valid():
  339. product = product_f.save(commit=False)
  340. product.contact = Contact.objects.get(user = self.request.user)
  341. product.edit=True
  342. product.public = False
  343. product.sumbitted = config.CURRENT_EVENT
  344. product.save()
  345. product_f.save_m2m()
  346. if 'addImage' in request.POST:
  347. return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': product.pk}))
  348. return HttpResponseRedirect(reverse('my-products'))
  349. else:
  350. context = request.POST.dict()
  351. context['product'] = product_f
  352. context['product_errors'] = product_f.errors
  353. context['use_ajax'] = True
  354. return render(request, self.template_name, context)
  355. class uploadView(LoginRequiredMixin, FormView):
  356. use_ajax = True
  357. template_name = 'marktplatz/file_upload.html'
  358. def get(self, request, pk):
  359. user = self.request.user
  360. contact = Contact.objects.get(user=user)
  361. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  362. raise Http404
  363. product = Product.objects.get(pk=pk)
  364. photo = product.media_set.count()
  365. video = product.video_set.count()
  366. context = request.GET.dict()
  367. contact = Contact.objects.get(user=self.request.user)
  368. product = get_object_or_404(Wohnprojekt, (Q(pk=pk) & Q(contact=contact)))
  369. context['product'] = product
  370. context['images'] = Media.objects.filter(product=product)
  371. context['video'] = Video.objects.filter(product=product)
  372. context['media'] = MediaForm
  373. context['media_count'] = False
  374. context['video_count'] = False
  375. if photo >= 7:
  376. context['media_count'] = True
  377. if video >= 2:
  378. context['video_count'] = True
  379. context['use_ajax'] = True
  380. context['warning'] = False
  381. return render(request, self.template_name, context)
  382. def post(self, request, pk):
  383. vid1_f = MediaForm(request.POST, request.FILES)
  384. product = Product.objects.get(pk=pk)
  385. i = product.media_set.count()
  386. i += product.video_set.count()
  387. video = product.video_set.count()
  388. photo = product.media_set.count()
  389. context = request.GET.dict()
  390. contact = Contact.objects.get(user=self.request.user)
  391. product = get_object_or_404(Product, (Q(pk=pk) & Q(contact=contact)))
  392. context['product'] = product
  393. context['images'] = Media.objects.filter(product=product)
  394. context['video'] = Video.objects.filter(product=product)
  395. context['media'] = MediaForm
  396. context['media_count'] = False
  397. context['video_count'] = False
  398. context['use_ajax'] = True
  399. context['warning'] = False
  400. if vid1_f.is_valid():
  401. image = vid1_f.cleaned_data['image']
  402. name = image.name
  403. if 'png' in name or 'jpg' in name or 'jpeg' in name:
  404. if photo < 7:
  405. vid1 = Media()
  406. vid1.product = product
  407. vid1.filename = name
  408. vid1.copyright = vid1_f.cleaned_data['copyright']
  409. vid1.name_for = vid1_f.cleaned_data['name_for']
  410. vid1.image.save(name, image)
  411. vid1.image_small.save(str(i) + '_small', image)
  412. vid1.image_medium.save(str(i) + '_medium', image)
  413. vid1.image_big.save(str(i) + '_big', image)
  414. vid1.image_norm.save(str(i) + '_norm', image)
  415. vid1.save
  416. photo += 1
  417. else:
  418. context['warning'] = "You can not upload any more photos!"
  419. elif 'mp4' in name or 'm3u8' in name or 'm4v' in name:
  420. if video < 2:
  421. #TODO clean image here!
  422. vid1 = Video()
  423. vid1.product = product
  424. vid1.filename = name
  425. vid1.copyright = vid1_f.cleaned_data['copyright']
  426. vid1.name_for = vid1_f.cleaned_data['name_for']
  427. vid1.image.save(name, image)
  428. vid1.save
  429. video += 1
  430. else:
  431. context['warning'] = "You can not upload any more videos!"
  432. vid1_f.delete_temporary_files()
  433. if photo >= 7:
  434. context['media_count'] = True
  435. if video >= 2:
  436. context['video_count'] = True
  437. return render(request, self.template_name, context)
  438. handle_upload = FileFormUploader()
  439. # class EditView(UpdateView):
  440. #
  441. # model = Wohnprojekt
  442. # fields = [
  443. # # 'title','country','city','year','owner','teaser_txt','header','category', 'description_txt',
  444. # 'terms', 'product',
  445. # 'name','claim','beschreibung','learning','gruendungsjahr','betriebgenommen','status','adresse','website','email','frei','kfrei', 'mitmachen','rechtsform','ort','orga',
  446. # 'eigentum', 'inseratstext', 'altneu', 'schwerpunkt', 'wohnbaufoerderung', 'artmodell', 'bautraeger', 'aerwachsene', 'akinder', 'awohnungen', 'wohnflaeche', 'gewerbeflaechen', 'gemeinschaftsflaeche', 'sonstige_flaechen', 'kflaechen', 'gemeinschaftr', 'kgemeinschaftr', 'sonderwohnformen', 'raumangebot', 'kraumangebot', 'parbeiten', 'karbeiten', 'bauweise', 'zielgruppen', 'gprojekte', 'oekologie', 'freiraumangebote', 'gaestwohnungen',
  447. # ]
  448. # # exclude = ['']
  449. # # form_class = SubmissionForm
  450. # template_name = 'marktplatz/add.html'
  451. class EditView(FormView):
  452. template_name = 'marktplatz/add.html'
  453. def get(self, request, pk):
  454. user = self.request.user
  455. contact = Contact.objects.get(user=user)
  456. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  457. raise Http404
  458. context = request.GET.dict()
  459. context['product'] = SubmissionForm(instance=Wohnprojekt.objects.get(pk=pk))
  460. linkFormSet = inlineformset_factory(Product,Link, form=LinkForm, extra=0)
  461. myLinkFormSet = linkFormSet(instance= Product.objects.get(pk=pk) )
  462. context['lnks'] = myLinkFormSet
  463. context['lnks_helper'] = FormsetHelper()
  464. context['use_ajax'] = True
  465. context['info_txt'] = Template(config.INFO_TXT).render(Context(context))
  466. return render(request, self.template_name, context)
  467. def post(self, request, pk):
  468. # print ( request.POST.dict() )
  469. product_f = SubmissionForm(request.POST, request.FILES, instance=Wohnprojekt.objects.get(pk=pk))
  470. if product_f.is_valid():
  471. # https://stackoverflow.com/questions/35879101/how-to-determine-if-a-field-has-changed-in-a-django-modelform/43550210
  472. if product_f.has_changed():
  473. update_fields = product_f.changed_data
  474. product = product_f.save( commit=False )
  475. print ('product_f.changed_data: ', product_f.changed_data)
  476. product.save( update_fields=update_fields )
  477. # product = product_f.save()
  478. # for lnk in lnks_f:
  479. # if lnk.is_valid():
  480. # print( "link valid ......................." )
  481. # lnk_ = lnk.save(commit=False)
  482. # lnk_.product = product
  483. # lnk_.save()
  484. if 'addImage' in request.POST:
  485. return HttpResponseRedirect(reverse('add-Image', kwargs={'pk': pk}))
  486. return HttpResponseRedirect(reverse('my-products'))
  487. else:
  488. print( "not saved xxxxxxx" )
  489. context = request.GET.dict()
  490. context['product'] = product_f
  491. context['product_errors'] = product_f.errors
  492. # context['lnks'] = lnks_f
  493. # context['lnks_helper'] = FormsetHelper()
  494. context['use_ajax'] = True
  495. return render(request, self.template_name, context)
  496. class UsersProducts(LoginRequiredMixin, generic.ListView):
  497. model = Product
  498. template_name='marktplatz/myProducts.html'
  499. def get_queryset(self):
  500. contact = Contact.objects.get(user=self.request.user)
  501. return Product.objects.filter(contact=contact)
  502. def get_context_data(self, **kwargs):
  503. context = super().get_context_data(**kwargs)
  504. contact = Contact.objects.get(user=self.request.user)
  505. context['user'] = self.request.user
  506. return context
  507. class MediaView(LoginRequiredMixin, TemplateView):
  508. template_name = 'marktplatz/media_overview.html'
  509. def get(self, request, pk):
  510. self.user = self.request.user
  511. user= self.user
  512. contact = Contact.objects.get(user=user)
  513. if not Product.objects.filter(contact=contact).filter(pk=pk).exists():
  514. raise Http404
  515. context = request.GET.dict()
  516. contact = Contact.objects.get(user=self.request.user)
  517. product = get_object_or_404(Product, (Q(pk = pk) & Q(contact = contact)))
  518. context['product'] = product
  519. context['media'] = Media.objects.filter(product=product)
  520. context['video'] = Video.objects.filter(product=product)
  521. return render(request, self.template_name, context)
  522. def delete_media(request, pk):
  523. user = request.user
  524. contact = Contact.objects.get(user=user)
  525. object = Media.objects.get(id=pk)
  526. if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
  527. raise Http404
  528. object.delete()
  529. return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
  530. def delete_video(request, pk):
  531. user = request.user
  532. contact = Contact.objects.get(user=user)
  533. object = Video.objects.get(id=pk)
  534. if not Product.objects.filter(contact=contact).filter(pk=object.product.pk).exists():
  535. raise Http404
  536. object.delete()
  537. return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))