def object_detail(request, queryset, object_id=None, slug=None, slug_field='slug', template_name=None, template_name_field=None, template_loader=loader, extra_context=None, context_processors=None, template_object_name='object', mimetype=None): """ Generic detail of an object. Templates: ``<app_label>/<model_name>_detail.html`` Context: object the object """ if extra_context is None: extra_context = {} model = queryset.model obj = lookup_object(model, object_id, slug, slug_field, queryset) if not template_name: template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower()) if template_name_field: template_name_list = [getattr(obj, template_name_field), template_name] t = template_loader.select_template(template_name_list) else: t = template_loader.get_template(template_name) c = RequestContext(request, { template_object_name: obj, }, context_processors) for key, value in extra_context.items(): if callable(value): c[key] = value() else: c[key] = value response = HttpResponse(t.render(c), mimetype=mimetype) populate_xheaders(request, response, model, obj.key()) return response
def delete_object(request, model, post_delete_redirect, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=loader, extra_context=None, login_required=False, context_processors=None, template_object_name='object', post_delete_redirect_args=()): ''' Uses generic view. Only difference is that instead of post_delete_redirect, this will reverse the url at first original: def delete_object(request, model, post_delete_redirect, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=loader, extra_context=None, login_required=False, context_processors=None, template_object_name='object') ''' post_delete_redirect = reverse(post_delete_redirect, args=post_delete_redirect_args) obj = lookup_object(model, object_id, slug, slug_field) if hasattr(obj, 'can_remove'): if not obj.can_remove(): if request.user.is_authenticated(): request.user.message_set.create(message=ugettext("Object %(verbose_name)s can't be removed.") % {"verbose_name": model._meta.verbose_name}) return HttpResponseRedirect(post_delete_redirect) return _delete_object(request, model=model, post_delete_redirect=post_delete_redirect, object_id=object_id, slug=slug, slug_field=slug_field, template_name=template_name, template_loader=template_loader, extra_context=extra_context, login_required=login_required, context_processors=context_processors, template_object_name=template_object_name)
def course_request_create(request, slug): """ File a :model:`tiger.CourseRequest` for a given :model:`tiger.Course` """ initial_form_data = {} if not request.user.is_authenticated(): request.flash["messages"] = [ ("S Please login or create an account to request this course") ] return HttpResponseRedirect('/login/?next=%s' % request.path) course = lookup_object(Course, None, slug, 'slug') initial_form_data['course'] = course.id # Lookup profile or redirect to create_profile try: person = request.user.get_profile() initial_form_data['person'] = person.id except: request.flash["messages"] = [( "S First, we'll need some contact information to contact you about your request" )] return create_profile(request, success_url=reverse('course_request_create', args=[course.slug])) model, form_class = CourseRequest, CourseRequestForm if request.method == 'POST': form = form_class(request.POST, request.FILES, initial=initial_form_data, min_students=course.min_required_students) if form.is_valid(): new_course_request = form.save(commit=False) new_course_request.person = person new_course_request.course = course new_course_request.save() request.user.message_set.create( message=_("S The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name}) return redirect_to( request, reverse('course_request_detail', args=[new_course_request.id])) else: form = form_class(initial=initial_form_data) # Create the template, context, response template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) t = loader.get_template(template_name) c = RequestContext(request, {'form': form, 'object': course}) return HttpResponse(t.render(c))
def _update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=template_loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, msg=None, summary_template_name=None): """ Based of django.views.generic.create_update.update_object which displays a summary page before updating the object. """ if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data template_name = summary_template_name elif edit == '1': extra_context['show_form'] = True else: obj = form.save() if not msg: msg = _( "The %(verbose_name)s was created successfully.") msg = msg % model._meta.__dict__ messages.success(request, msg, fail_silently=True) return redirect(post_save_redirect, obj) else: form = form_class(instance=obj) if not template_name: template_name = "%s/%s_form.html" % \ (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) c = RequestContext(request, { 'form': form, template_object_name: obj, }, context_processors) apply_extra_context(extra_context, c) response = HttpResponse(t.render(c)) populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname)) return response
def _update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=template_loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, msg=None): """ Based of django.views.generic.create_update.update_object which displays a summary page before updating the object. """ response = None if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) try: model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data elif edit == '1': extra_context['show_form'] = True else: obj = form.save() if not msg: msg = _( "The %(verbose_name)s was created successfully.") msg = msg % model._meta.__dict__ messages.success(request, msg, fail_silently=True) response = redirect(post_save_redirect, obj) else: form = form_class(instance=obj) except (IOError, PermissionDenied), e: messages.error(request, e) return None
def update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, initial=None): """ Generic object-update function. Templates: ``<app_label>/<model_name>_form.html`` Context: form the form for the object object the original object being edited """ if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': if issubclass(form_class, ModelFormWithRequest): form = form_class(request, request.POST, request.FILES, instance=obj) else: form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): obj = form.save() msg = ugettext("The %(verbose_name)s was updated successfully.") %\ {"verbose_name": model._meta.verbose_name} messages.success(request, msg, fail_silently=True) return redirect(post_save_redirect, obj) else: if issubclass(form_class, ModelFormWithRequest): form = form_class(request, instance=obj, initial=initial) else: form = form_class(instance=obj, initial=initial) if not template_name: template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) c = RequestContext(request, { 'form': form, template_object_name: obj, }, context_processors) apply_extra_context(extra_context, c) response = HttpResponse(t.render(c)) populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname)) return response
def change_muaccount(request, instance_id, form_exclude=None, *args, **kwargs): obj = lookup_object(MUAccount, instance_id, None, None) if obj.owner != request.user: return HttpResponseForbidden() form_exclude = [] if form_exclude is None else list(form_exclude) if not request.user.has_perm('muaccounts.can_set_analytics_code'): form_exclude.append('analytics_code') if not request.user.has_perm('muaccounts.can_set_custom_domain'): form_exclude.append('domain') if not request.user.has_perm('muaccounts.can_set_public_status'): form_exclude.append('is_public') if not request.user.has_perm('muaccounts.can_set_bounty_status'): form_exclude.append('is_bounty') return frontend_edit(request, instance_id=instance_id, form_exclude=form_exclude, *args, **kwargs)
def delete_object(request, model, post_delete_redirect, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=loader, extra_context=None, login_required=False, context_processors=None, template_object_name='object'): """ Generic object-delete function. The given template will be used to confirm deletetion if this view is fetched using GET; for safty, deletion will only be performed if this view is POSTed. Templates: ``<app_label>/<model_name>_confirm_delete.html`` Context: object the original object being deleted """ if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': obj.delete() if request.user.is_authenticated(): request.user.message_set.create(message=ugettext("The %(verbose_name)s was deleted.") % {"verbose_name": model._meta.verbose_name}) return HttpResponseRedirect(post_delete_redirect) else: if not template_name: template_name = "%s/%s_confirm_delete.html" % (model._meta.app_label, model._meta.object_name.lower()) if hasattr(request, 'device'): d = getattr(request, 'device', {}) t = template_loader.get_template(template_name, d) else: t = template_loader.get_template(template_name) c = RequestContext(request, { template_object_name: obj, }, context_processors) apply_extra_context(extra_context, c) response = HttpResponse(t.render(c)) populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname)) return response
def _update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=template_loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, msg=None, summary_template_name=None): """ Based of django.views.generic.create_update.update_object which displays a summary page before updating the object. """ response = None if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) try: model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data template_name = summary_template_name elif edit == '1': extra_context['show_form'] = True else: obj = form.save() if not msg: msg = _("The %(verbose_name)s was created successfully.") msg = msg % model._meta.__dict__ messages.success(request, msg, fail_silently=True) response = redirect(post_save_redirect, obj) else: form = form_class(instance=obj) except (IOError, PermissionDenied), e: messages.error(request, e) return None
def task_update( request, model=None, object_id=None, slug=None, slug_field="slug", template_name=None, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name="object", form_class=None, ): if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == "POST": # ~ recuperar o crear el proyecto p = Project.objects.get_or_create_by_owner_and_title(request.user, request.POST.get("project_title")) form = form_class(request.POST, request.FILES, instance=obj) del form.fields["project"] if form.is_valid(): obj = form.save(commit=False) obj.project = p obj.save() msg = ugettext("The %(verbose_name)s was updated successfully.") % { "verbose_name": model._meta.verbose_name } messages.success(request, msg, fail_silently=True) if "_continue" not in request.POST: return redirect(post_save_redirect, obj) else: form = form_class(instance=obj) if not template_name: template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) return render_to_response(template_name, {"form": form, "object": obj}, RequestContext(request))
def course_request_cancel(request, id): """ Update a :model:`tiger.CourseRequest` object """ course_request = lookup_object(CourseRequest, id, None, None) if course_request.session: request.flash["messages"] = [ _("S This course is scheduled. Please contact us") ] else: # Set status to cancelled - by client course_request.status = -2 course_request.save() request.flash["messages"] = [ _("S Your course request has been cancelled") ] # TODO: Confirm CSRF return HttpResponseRedirect( reverse('profiles.views.profile_detail', args=[request.user.username]))
def update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, inlines=None): """ Generic object-update function with inlines. Templates: ``<app_label>/<model_name>_form.html`` Context: form the form for the object object the original object being edited xxx_formset ModelFormSet for model classes in ``inlines`` argument. """ if extra_context is None: extra_context = {} if inlines is None: inlines = () if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) formset_classes = [] formsets = [] model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) for inline in inlines: formset_classes.append(inlineformset_factory(model, **inline)) if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): form_validated = True new_object = form.save() else: form_validated = False new_object = obj for klass in formset_classes: formset = klass(request.POST, request.FILES, instance=new_object) formsets.append(formset) if all_valid(formsets) and form_validated: new_object.save() for formset in formsets: formset.save() if request.user.is_authenticated(): request.user.message_set.create(message=ugettext("The " "%(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name}) return redirect(post_save_redirect, new_object) else: form = form_class(instance=obj) for klass in formset_classes: formset = klass(instance=obj) formsets.append(formset) if not template_name: template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) template = template_loader.get_template(template_name) context = RequestContext(request, { 'form': form, template_object_name: obj, }, context_processors) apply_extra_context(extra_context, context) for formset in formsets: key = '%s_formset' % formset.model._meta.object_name.lower() context[key] = formset response = http.HttpResponse(template.render(context)) populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.name)) return response
def delete_muaccount(request, instance_id, *args, **kwargs): obj = lookup_object(MUAccount, instance_id, None, None) if obj.owner != request.user: return HttpResponseForbidden() return frontend_del(request, instance_id=instance_id, *args, **kwargs)
def _update_object(request, model=None, object_id=None, slug=None, slug_field='slug', template_name=None, template_loader=template_loader, extra_context=None, post_save_redirect=None, login_required=False, context_processors=None, template_object_name='object', form_class=None, msg=None, summary_template_name=None): """ Based of django.views.generic.create_update.update_object which displays a summary page before updating the object. """ if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) model, form_class = get_model_and_form_class(model, form_class) obj = lookup_object(model, object_id, slug, slug_field) if request.method == 'POST': form = form_class(request.POST, request.FILES, instance=obj) if form.is_valid(): verify = request.GET.get('verify') edit = request.GET.get('edit') if verify == '1': extra_context['show_form'] = False extra_context['form_data'] = form.cleaned_data template_name = summary_template_name elif edit == '1': extra_context['show_form'] = True else: obj = form.save() if not msg: msg = _("The %(verbose_name)s was created successfully.") msg = msg % model._meta.__dict__ messages.success(request, msg, fail_silently=True) return redirect(post_save_redirect, obj) else: form = form_class(instance=obj) if not template_name: template_name = "%s/%s_form.html" % \ (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) c = RequestContext(request, { 'form': form, template_object_name: obj, }, context_processors) apply_extra_context(extra_context, c) response = HttpResponse(t.render(c)) populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.attname)) return response