Skip to content

Commit 490e13b

Browse files
committed
Merge pull request #51 from arcticshores/one-to-one-field
Span OneToOneField relationship using double underscores.
2 parents b0e4bc2 + 2906806 commit 490e13b

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

django_pandas/io.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def to_fields(qs, fieldnames):
88
model = qs.model
99
for fieldname_part in fieldname.split('__'):
1010
field = model._meta.get_field(fieldname_part)
11-
if field.get_internal_type() == 'ForeignKey':
11+
if field.get_internal_type() in ('ForeignKey', 'OneToOneField'):
1212
model = field.rel.to
1313
yield field
1414

django_pandas/tests/models.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,21 +122,31 @@ def __str__(self):
122122
return "{0}-{1}".format(self.isin, self.symbol)
123123

124124

125+
@python_2_unicode_compatible
126+
class TradeLogNote(models.Model):
127+
note = models.TextField()
128+
129+
def __str__(self):
130+
return self.note
131+
132+
125133
@python_2_unicode_compatible
126134
class TradeLog(models.Model):
127135
trader = models.ForeignKey(Trader)
128136
symbol = models.ForeignKey(Security, null=True)
129137
log_datetime = models.DateTimeField()
130138
price = models.FloatField()
131139
volume = models.IntegerField()
140+
note = models.OneToOneField(TradeLogNote)
132141

133142
objects = DataFrameManager()
134143

135144
def __str__(self):
136-
return "{0}-{1}-{2}-{3}-{4}".format(
145+
return "{0}-{1}-{2}-{3}-{4}-{5}".format(
137146
self.trader,
138147
self.symbol,
139148
self.log_datetime,
140149
self.price,
141-
self.volume
150+
self.volume,
151+
self.note
142152
)

django_pandas/tests/test_io.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django.db.models import Sum
33
import pandas as pd
44
import numpy as np
5-
from .models import MyModel, Trader, Security, TradeLog, MyModelChoice
5+
from .models import MyModel, Trader, Security, TradeLog, TradeLogNote, MyModelChoice
66
from django_pandas.io import read_frame
77

88

@@ -85,28 +85,36 @@ def setUp(self):
8585
zyz = Security.objects.create(symbol='ZYZ', isin='999907')
8686
TradeLog.objects.create(trader=bob, symbol=None,
8787
log_datetime='2013-01-01T09:30:00',
88-
price=30, volume=300)
88+
price=30, volume=300,
89+
note=TradeLogNote.objects.create(note='aaa'))
8990
TradeLog.objects.create(trader=bob, symbol=None,
9091
log_datetime='2013-01-01T10:00:00',
91-
price=30, volume=300)
92+
price=30, volume=300,
93+
note=TradeLogNote.objects.create(note='aab'))
9294
TradeLog.objects.create(trader=bob, symbol=abc,
9395
log_datetime='2013-01-01T10:30:00',
94-
price=30, volume=300)
96+
price=30, volume=300,
97+
note=TradeLogNote.objects.create(note='aac'))
9598
TradeLog.objects.create(trader=bob, symbol=abc,
9699
log_datetime='2013-01-01T11:00:00',
97-
price=30, volume=300)
100+
price=30, volume=300,
101+
note=TradeLogNote.objects.create(note='aad'))
98102
TradeLog.objects.create(trader=fish, symbol=zyz,
99103
log_datetime='2013-01-01T09:30:00',
100-
price=30, volume=300)
104+
price=30, volume=300,
105+
note=TradeLogNote.objects.create(note='aae'))
101106
TradeLog.objects.create(trader=fish, symbol=zyz,
102107
log_datetime='2013-01-01T10:00:00',
103-
price=30, volume=300)
108+
price=30, volume=300,
109+
note=TradeLogNote.objects.create(note='aaf'))
104110
TradeLog.objects.create(trader=fish, symbol=zyz,
105111
log_datetime='2013-01-01T10:30:00',
106-
price=30, volume=300)
112+
price=30, volume=300,
113+
note=TradeLogNote.objects.create(note='aag'))
107114
TradeLog.objects.create(trader=fish, symbol=zyz,
108115
log_datetime='2013-01-01T11:00:00',
109-
price=30, volume=300)
116+
price=30, volume=300,
117+
note=TradeLogNote.objects.create(note='aah'))
110118

111119
def test_verbose(self):
112120
qs = TradeLog.objects.all()
@@ -124,7 +132,7 @@ def test_verbose(self):
124132
def test_related_cols(self):
125133
qs = TradeLog.objects.all()
126134
cols = ['log_datetime', 'symbol', 'symbol__isin', 'trader__name',
127-
'price', 'volume']
135+
'price', 'volume', 'note__note']
128136
df = read_frame(qs, cols, verbose=False)
129137

130138
self.assertEqual(df.shape, (qs.count(), len(cols)))

0 commit comments

Comments
 (0)