views.py 24 KB

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