Allow adding location when none exist

This commit is contained in:
Gabriel Augendre 2019-03-02 17:39:53 +01:00
parent 0a68fcceb7
commit 5f9a15dbb4
3 changed files with 57 additions and 7 deletions

23
map/forms.py Normal file
View file

@ -0,0 +1,23 @@
from django import forms
from map.models import FriendLocation
class LocationForm(forms.ModelForm):
class Meta:
model = FriendLocation
fields = [
'latitude',
'longitude',
'start_date',
'end_date',
'friend',
]
widgets = {'friend': forms.HiddenInput()}
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
def clean_friend(self):
return self.request.user

View file

@ -5,4 +5,5 @@ from map import views
urlpatterns = [
path('', views.MapView.as_view(), name='map'),
path('change-location/<int:pk>', views.EditLocationView.as_view(), name='change-location'),
path('add-location/<int:pk>', views.AddLocationView.as_view(), name='add-location'),
]

View file

@ -5,6 +5,7 @@ from django.urls import reverse_lazy
from django.views import generic
from map import models
from map.forms import LocationForm
from map.mixins import QuickActionsMixin
@ -14,13 +15,22 @@ class MapView(LoginRequiredMixin, QuickActionsMixin, generic.ListView):
template_name = 'map/map.html'
def get_quick_actions(self):
return [
{
'url': reverse_lazy('change-location', kwargs={'pk': self.request.user.location.pk}),
'category': 'secondary',
'display': f'Change your location'
},
]
try:
return [
{
'url': reverse_lazy('change-location', kwargs={'pk': self.request.user.location.pk}),
'category': 'secondary',
'display': f'Change your location'
},
]
except models.FriendLocation.DoesNotExist:
return [
{
'url': reverse_lazy('add-location', kwargs={'pk': self.request.user.pk}),
'category': 'secondary',
'display': f'Add your location'
},
]
class EditLocationView(LoginRequiredMixin, generic.UpdateView):
@ -44,3 +54,19 @@ class EditLocationView(LoginRequiredMixin, generic.UpdateView):
return redirect('map')
return super().dispatch(request, *args, **kwargs)
class AddLocationView(LoginRequiredMixin, generic.CreateView):
model = models.FriendLocation
context_object_name = 'location'
template_name = 'map/change_location.html'
success_url = reverse_lazy('map')
def get_initial(self):
initial = super().get_initial()
initial = initial.copy()
initial['friend'] = self.request.user
return initial
def get_form(self, form_class=None):
return LocationForm(self.request, **self.get_form_kwargs())