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, 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