def event_edit(request, event_pk=None): instance = None if event_pk is not None: instance = Event.objects.select_related().get(pk=event_pk) if request.method == 'POST': form = EventForm(request.POST, instance=instance) authors = [a.split(' - ') for a in request.POST.getlist('authors') if ' - ' in a] if form.is_valid(): new_event = form.save(commit=False) old_sodelovanja = set() if instance is not None: old_sodelovanja = set(instance.sodelovanje_set.all()) sodelovanja = set() for author, tip in authors: tip = TipSodelovanja.objects.get(name=tip) # ensure the Person actually exists try: person = Person.objects.get(name=author) except Person.DoesNotExist: person = Person(name=author) person.save() try: s = Sodelovanje.objects.get(event=new_event, tip=tip, person=person) except Sodelovanje.DoesNotExist: s = Sodelovanje(event=new_event, tip=tip, person=person) s.save() sodelovanja.add(s) new_event.save() # somehow this causes event.technician to become empty?? #form.save_m2m() # remove old objects, that were not POSTed for i in old_sodelovanja & sodelovanja ^ old_sodelovanja: i.delete() return HttpResponseRedirect(new_event.get_absolute_url()) else: form = EventForm(instance=instance) context = { 'form': form, 'tipi': TipSodelovanja.objects.all(), 'sodelovanja': instance and instance.sodelovanje_set.all() or None, # TODO: remove duplicates 'prev_sodelovanja': Sodelovanje.objects.values('tip__name', 'person__name').distinct().order_by('-person__name'), 'image': (instance and instance.event_image and instance.event_image.image) or None } return render_to_response('org/event_edit.html', RequestContext(request, context))
def person(request): if request.method == 'POST': form = PersonForm(request.POST) if form.is_valid(): person = Person(name=form.cleaned_data['name']) person.save() for key, value in form.cleaned_data.items(): if not value or key == 'name': continue clas = key[0].capitalize() + key[1:] exec 'from intranet.org.models import ' + clas for k in request.POST.getlist(key): new_var = locals()[clas](**{key: k}) new_var.save() Person.__dict__[key].__get__(person, clas).add(new_var) return HttpResponseRedirect('../')
def event_edit(request, event_pk=None): instance = None authors = None if event_pk is not None: instance = get_object_or_404(Event.objects.select_related(), pk=event_pk) if request.method == "POST": form = EventForm(request.POST, instance=instance) authors = [a.split(" - ") for a in request.POST.getlist("authors") if " - " in a] if form.is_valid(): new_event = form.save(commit=False) old_sodelovanja = set() if instance is not None: old_sodelovanja = set(instance.sodelovanje_set.all()) sodelovanja = set() for author, tip in authors: tip = TipSodelovanja.objects.get(name=tip) # ensure the Person actually exists try: person = Person.objects.get(name=author) except Person.DoesNotExist: person = Person(name=author) person.save() try: s = Sodelovanje.objects.get(event=new_event, tip=tip, person=person) except Sodelovanje.DoesNotExist: s = Sodelovanje(event=new_event, tip=tip, person=person) s.save() sodelovanja.add(s) new_event.save() # somehow this causes event.technician to become empty?? # form.save_m2m() # remove old objects, that were not POSTed for i in old_sodelovanja & sodelovanja ^ old_sodelovanja: i.delete() return redirect("event_list") # changed redirect after successful add/edit # keeping the old version here just in case we change our mind # return HttpResponseRedirect(reverse('intranet.org.views.event_edit', args=[new_event.id])) else: authors = request.POST.getlist("authors") else: form = EventForm(instance=instance) context = { "form": form, "tipi": TipSodelovanja.objects.all(), "sodelovanja": instance and instance.sodelovanje_set.all() or None, "authors": authors, # TODO: remove duplicates "prev_sodelovanja": Sodelovanje.objects.values("tip__name", "person__name") .distinct() .order_by("-person__name"), "image": (instance and instance.event_image and instance.event_image.image) or None, } return render_to_response("org/event_edit.html", RequestContext(request, context))