From 4b4a4ac213c53eda195a1a6c40bb44476748ce6f Mon Sep 17 00:00:00 2001 From: Bertrand Bordage Date: Sat, 24 May 2014 02:52:13 +0200 Subject: [PATCH 1/2] Tests NULL values on ForeignKeys. After this commit, the modified test should fail. --- django_pandas/tests/models.py | 2 +- django_pandas/tests/test_io.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/django_pandas/tests/models.py b/django_pandas/tests/models.py index 6efbb0a..7ebd0da 100644 --- a/django_pandas/tests/models.py +++ b/django_pandas/tests/models.py @@ -116,7 +116,7 @@ def __unicode__(self): class TradeLog(models.Model): trader = models.ForeignKey(Trader) - symbol = models.ForeignKey(Security) + symbol = models.ForeignKey(Security, null=True) log_datetime = models.DateTimeField() price = models.FloatField() volume = models.IntegerField() diff --git a/django_pandas/tests/test_io.py b/django_pandas/tests/test_io.py index 4281704..d722043 100644 --- a/django_pandas/tests/test_io.py +++ b/django_pandas/tests/test_io.py @@ -70,10 +70,10 @@ def setUp(self): fish = Trader.objects.create(name="Fred Fish") abc = Security.objects.create(symbol='ABC', isin='999901') zyz = Security.objects.create(symbol='ZYZ', isin='999907') - TradeLog.objects.create(trader=bob, symbol=abc, + TradeLog.objects.create(trader=bob, symbol=None, log_datetime='2013-01-01T09:30:00', price=30, volume=300) - TradeLog.objects.create(trader=bob, symbol=abc, + TradeLog.objects.create(trader=bob, symbol=None, log_datetime='2013-01-01T10:00:00', price=30, volume=300) TradeLog.objects.create(trader=bob, symbol=abc, From d5de0e26fb15dceefd18e0d7ad025dd94d1dc921 Mon Sep 17 00:00:00 2001 From: Bertrand Bordage Date: Sat, 24 May 2014 02:52:23 +0200 Subject: [PATCH 2/2] Revert "Replaces math.isnan with simple None comparisons." This reverts commit ebbb44261bb1082c80f819b435fef91abb1795ce. And this fixes the broken test introduced in the previous commit. --- django_pandas/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/django_pandas/utils.py b/django_pandas/utils.py index c725792..2a87efa 100644 --- a/django_pandas/utils.py +++ b/django_pandas/utils.py @@ -1,5 +1,6 @@ # coding: utf-8 +from math import isnan from django.core.cache import cache from django.utils.encoding import force_text @@ -31,7 +32,7 @@ def replace_pk(model): base_cache_key = get_base_cache_key(model) def inner(pk_list): - cache_keys = [None if pk is None else base_cache_key % pk + cache_keys = [None if isnan(pk) else base_cache_key % pk for pk in pk_list] out_dict = cache.get_many(frozenset(cache_keys)) try: @@ -41,7 +42,7 @@ def inner(pk_list): out_dict = { base_cache_key % obj.pk: force_text(obj) for obj in model.objects.filter(pk__in={pk for pk in pk_list - if pk is not None})} + if not isnan(pk)})} cache.set_many(out_dict) out_list = list(map(out_dict.get, cache_keys)) return out_list