64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
from birds.models import Bird, BirdingLocation
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.http import HttpResponseRedirect
|
|
from django.urls import reverse_lazy
|
|
from django.views import generic
|
|
from scrobbles.models import EBirdCSVImport as BirdingCSVImport
|
|
from scrobbles.views import (
|
|
ScrobbleableDetailView,
|
|
ScrobbleableListView,
|
|
JsonableResponseMixin,
|
|
)
|
|
|
|
|
|
class BirdingLocationListView(ScrobbleableListView):
|
|
model = BirdingLocation
|
|
|
|
|
|
class BirdingLocationDetailView(ScrobbleableDetailView):
|
|
model = BirdingLocation
|
|
|
|
|
|
class BirdListView(generic.ListView):
|
|
model = Bird
|
|
paginate_by = 200
|
|
ordering = "common_name"
|
|
|
|
|
|
class BirdDetailView(generic.DetailView):
|
|
model = Bird
|
|
slug_field = "uuid"
|
|
|
|
|
|
class BirdingCSVImportCreateView(
|
|
LoginRequiredMixin, JsonableResponseMixin, generic.CreateView
|
|
):
|
|
model = BirdingCSVImport
|
|
fields = ["csv_file"]
|
|
template_name = "scrobbles/upload_form.html"
|
|
success_url = reverse_lazy("vrobbler-home")
|
|
|
|
def form_valid(self, form):
|
|
self.object = form.save(commit=False)
|
|
self.object.user = self.request.user
|
|
self.object.original_filename = (
|
|
form.cleaned_data["csv_file"].name
|
|
)
|
|
self.object.save()
|
|
self.object.process()
|
|
return HttpResponseRedirect(self.request.META.get("HTTP_REFERER"))
|
|
|
|
|
|
class BirdingCSVImportDetailView(LoginRequiredMixin, generic.DetailView):
|
|
model = BirdingCSVImport
|
|
slug_field = "uuid"
|
|
template_name = "scrobbles/import_detail.html"
|
|
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user=self.request.user)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context_data = super().get_context_data(**kwargs)
|
|
context_data["title"] = "eBird CSV Import"
|
|
return context_data
|