fix saving route options

This commit is contained in:
Laura Klünder 2017-12-24 21:13:40 +01:00
parent 9a95faa620
commit e237b26464

View file

@ -89,9 +89,14 @@ class RouteOptions(models.Model):
@classmethod @classmethod
def get_for_request(cls, request): def get_for_request(cls, request):
session_options = request.session.get('route_options', None) session_options = request.session.get('route_options', None)
if session_options is not None:
session_options = cls(request=request)
session_options.update(session_options, ignore_errors=True)
user_options = None user_options = None
if request.user.is_authenticated: if request.user.is_authenticated:
user_options = cls.get_for_user(request.user) user_options = cls.get_for_user(request.user)
user_options.clean_data()
if session_options and not user_options: if session_options and not user_options:
user_options = session_options user_options = session_options
@ -99,12 +104,9 @@ class RouteOptions(models.Model):
user_options.save() user_options.save()
request.session.pop('session_options') request.session.pop('session_options')
options = cls(request=request) return user_options or session_options or cls(request=request)
options.update(user_options or session_options or {}, ignore_errors=True)
return options
def __init__(self, *args, request=None, **kwargs): def clean_data(self):
super().__init__(*args, **kwargs)
new_data = OrderedDict() new_data = OrderedDict()
for name, field in self.get_fields().items(): for name, field in self.get_fields().items():
value = self.data.get(name) value = self.data.get(name)
@ -113,6 +115,10 @@ class RouteOptions(models.Model):
new_data[name] = value new_data[name] = value
self.data = new_data self.data = new_data
def __init__(self, *args, request=None, **kwargs):
super().__init__(*args, **kwargs)
self.clean_data()
self.request = request self.request = request
def __getitem__(self, key): def __getitem__(self, key):
@ -175,7 +181,7 @@ class RouteOptions(models.Model):
self.user = self.request.user self.user = self.request.user
return super().save(*args, **kwargs) return super().save(*args, **kwargs)
self.request.session['route_options'] = self self.request.session['route_options'] = self.data
def items(self): def items(self):
yield from self.data.items() yield from self.data.items()