futurecolors/django-geoip — pull request #32 by saippuakauppias (2013-07-02 09:00:16+00:00)
Title: Fix store empty values

Я абсолютно не уверен в том, правильно ли я всё сделал, но по-другому мне не удалось его заставить работать: или при самом первом открытии страницы (куки нету) не выбирался нужный location, или при попытке обнуления оставался location, который берётся из ip (не куки).

Возможно, нужно было бы что-то сделать с условием из ``storage.py``:
```
# Cookie is obsolete, because we've changed it's value during request
if str(self._get_location_id()) != str(new_value):
return True
```
Но из-за того, что в ``Locator`` было условие:
```
if not stored_location:
```
пустое значение (GEOIP_LOCATION_EMPTY_VALUE, по дефолту равное 0), заставляло брать значение не из cookies, поэтому при смене региона на "все регионы" ничего не получалось :)
Да и ``process_response`` из-за первого и второго условия устанавливал регион из ip, когда регион у меня был сброшен в "пустой".

И ещё, к слову, у меня в кастомной LocationModel методы класса выглядят вот так (если принимать pull-request, то и в документации что-то об этом надо дописать):
```
class CustomRegion(GeoLocationFacade, ...):
...
is_enabled = models.BooleanField(_('enabled'), default=True)
geoip_region = models.OneToOneField(Region, related_name='custom_region',
blank=True, null=True,
verbose_name=_('GeoIP Region'))

@classmethod
def get_by_ip_range(cls, ip_range):
# try/except тут потому что есть ситуации, когда регион не привязан к модели
try:
region = ip_range.region.custom_region
except AttributeError:
raise Region.DoesNotExist
else:
return region

@classmethod
def get_default_location(cls):
return settings.GEOIP_LOCATION_EMPTY_VALUE

@classmethod
def get_available_locations(cls):
return cls.objects.filter(is_enabled=True)
```

PS: оставил с поломавшимися тестами, т.к. совершенно не понятно прав ли я в своём пулл-реквесте, он очень спорный, но рабочий для меня.
PPS: пока буду юзать свою ветку, возможно скоро даже в продакшене.