implement access_restriction field in Editor

This commit is contained in:
Laura Klünder 2017-07-13 18:54:49 +02:00
parent 11ff24cc49
commit 80ed95f91c
2 changed files with 19 additions and 1 deletions

View file

@ -65,6 +65,12 @@ class EditorFormBase(ModelForm):
if 'category' in self.fields:
self.fields['category'].label_from_instance = lambda obj: obj.title
if 'access_restriction' in self.fields:
AccessRestriction = self.request.changeset.wrap_model('AccessRestriction')
self.fields['access_restriction'].label_from_instance = lambda obj: obj.title
self.fields['access_restriction'].queryset = AccessRestriction.qs_for_request(self.request)
# parse titles
self.titles = None
if hasattr(self.instance, 'titles'):
@ -146,7 +152,7 @@ class EditorFormBase(ModelForm):
def create_editor_form(editor_model):
possible_fields = ['slug', 'name', 'altitude', 'category', 'width', 'groups', 'color', 'priority',
'public', 'can_search', 'can_describe', 'outside', 'geometry',
'access_restriction', 'can_search', 'can_describe', 'outside', 'geometry',
'single', 'allow_levels', 'allow_spaces', 'allow_areas', 'allow_pois',
'left', 'top', 'right', 'bottom']
field_names = [field.name for field in editor_model._meta.get_fields() if not field.one_to_many]

View file

@ -14,6 +14,12 @@ class AccessRestriction(TitledMixin, models.Model):
verbose_name_plural = _('Access Restrictions')
default_related_name = 'accessrestrictions'
@classmethod
def qs_for_request(cls, request):
if request.user.is_authenticated and request.user.is_superuser:
return cls.objects.all()
return cls.objects.none()
class AccessRestrictionMixin(SerializableMixin, models.Model):
access_restriction = models.ForeignKey(AccessRestriction, null=True, blank=True,
@ -26,3 +32,9 @@ class AccessRestrictionMixin(SerializableMixin, models.Model):
result = super()._serialize(**kwargs)
result['access_restriction'] = self.access_restriction_id
return result
@classmethod
def qs_for_request(cls, request):
if request.user.is_authenticated and request.user.is_superuser:
return cls.objects.all()
return cls.objects.filter(access_restriction__isnull=True)