class SpotExtendedInfoAdmin(admin.ModelAdmin): """ The admin model for SpotExtendedInfo. """ form = SpotExtendedInfoForm.implementation() list_display = ("spot", "key", "value") list_editable = ["key", "value"] list_filter = ["key", "spot"]
def _save_extended_info(sender, **kwargs): """Sync the extended info for the spot""" spot = kwargs['spot'] partial_update = kwargs['partial_update'] stash = kwargs['stash'] new_extended_info = stash['new_extended_info'] old_extended_info = stash['old_extended_info'] if new_extended_info is None: if not partial_update: SpotExtendedInfo.objects.filter(spot=spot).delete() else: # first, loop over the new extended info and either: # - add items that are new # - update items that are old for key in new_extended_info: value = new_extended_info[key] ei = None if key in old_extended_info: if value == old_extended_info[key]: continue else: ei = SpotExtendedInfo.objects.get(spot=spot, key=key) eiform = SpotExtendedInfoForm( { 'spot': spot.pk, 'key': key, 'value': value }, instance=ei) if not eiform.is_valid(): raise RESTFormInvalidError(eiform) ei = eiform.save() # Now loop over the different in the keys and remove old # items that aren't present in the new set for key in (set(old_extended_info.keys()) - set(new_extended_info.keys())): try: ei = SpotExtendedInfo.objects.get(spot=spot, key=key) ei.delete() except SpotExtendedInfo.DoesNotExist: # removing something that does not exist isn't an error pass
def _save_extended_info(sender, **kwargs): """Sync the extended info for the spot""" spot = kwargs['spot'] partial_update = kwargs['partial_update'] stash = kwargs['stash'] new_extended_info = stash['new_extended_info'] old_extended_info = stash['old_extended_info'] if new_extended_info is None: if not partial_update: SpotExtendedInfo.objects.filter(spot=spot).delete() else: # first, loop over the new extended info and either: # - add items that are new # - update items that are old for key in new_extended_info: value = new_extended_info[key] ei = None if key in old_extended_info: if value == old_extended_info[key]: continue else: ei = SpotExtendedInfo.objects.get(spot=spot, key=key) eiform = SpotExtendedInfoForm({'spot': spot.pk, 'key': key, 'value': value}, instance=ei) if not eiform.is_valid(): raise RESTFormInvalidError(eiform) ei = eiform.save() # Now loop over the different in the keys and remove old # items that aren't present in the new set for key in (set(old_extended_info.keys()) - set(new_extended_info.keys())): try: ei = SpotExtendedInfo.objects.get(spot=spot, key=key) ei.delete() except SpotExtendedInfo.DoesNotExist: # removing something that does not exist isn't an error pass
from django.dispatch import receiver from geoposition import Geoposition from geoposition.forms import GeopositionField import logging from spotseeker_server.admin import SpotAdmin from spotseeker_server.forms.spot import SpotForm as SSSpotForm, SpotExtendedInfoForm as SSSpotExtendedInfoForm from spotseeker_server.models import SpotAvailableHours, SpotImage, SpaceReview import re from .models import UIUCSpot, UIUCSpaceReview, HostAuthRule logger = logging.getLogger(__name__) SpotForm = SSSpotForm.implementation() SpotExtendedInfoForm = SSSpotExtendedInfoForm.implementation() SPOT_BOOLEAN_FIELDS = ( 'has_whiteboards', 'has_outlets', 'has_printing', 'has_scanner', 'has_displays', 'has_projector', 'has_computers', 'has_natural_light', 'reservable', ) SPOT_INTEGER_FIELDS = ( 'num_computers',