def edit_device(request, pk=None, product_line=None, model=None): """ Edits an existing device or adds a new one """ device = Device() device.sn = request.GET.get('sn', '') if product_line is not None: device.product_line = product_line if model is not None: device.product_line = product_line device.description = model_from_slug(product_line, model) if pk is not None: device = get_object_or_404(Device, pk=pk) form = DeviceForm(instance=device) if request.method == "POST": form = DeviceForm(request.POST, request.FILES, instance=device) if form.is_valid(): device = form.save() messages.success(request, _(u"%s saved") % device.description) device.add_tags(request.POST.getlist('tag')) return redirect(view_device, pk=device.pk, product_line=device.product_line, model=device.slug) else: messages.error(request, form.errors) data = prep_detail_view(request, pk, product_line, model) data['form'] = form return render(request, 'devices/form.html', data)