def dashboard(request):
newsletter, _ = Newsletter.objects.get_or_create(user=request.user,
defaults={
"email": request.user.email,
})
# Set forms on existing sources
sources = newsletter.source_set.all().order_by(Lower('name'))
for source in sources:
# Handle updates
is_updating = False
try:
is_updating = (int(request.GET.get("update", None)) == source.id)
except (ValueError, TypeError):
pass
# Only bind the form to POST if its the one being updated
source.form = SourceForm(request.POST if is_updating else None,
instance=source,
prefix="source-%s" % source.id)
if request.POST and is_updating and source.form.is_valid():
# Handle deletes
if source.form.cleaned_data["delete"]:
source.delete()
return form_complete(request, "Removed %s!" % source.name)
source.form.save()
source.refresh_from_db()
return form_complete(request, "Updated %s!" % source.name)
# Set up new source form
is_adding = "add" in request.GET
add_form = SourceForm(request.POST if is_adding else None,
prefix="new-source",
initial={"newsletter": newsletter})
if add_form.is_valid():
obj = add_form.save(commit=False)
obj.newsletter = newsletter
obj.save()
return form_complete(request, "Added %s!" % obj.name)
return render(request, "dashboard.html", {
"newsletter": newsletter,
"add_form": add_form,
"sources": sources,
})
评论列表
文章目录