views.py 26 KB

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