Skip to content

Commit f104c09

Browse files
committed
Add on_delete arguments to ForeignKeys
This attribute will be required in Django 2.0. Update initial migration to include the default of CASCADE, and then use better choices for applicable models.
1 parent 78793e5 commit f104c09

17 files changed

+124
-56
lines changed

multigtfs/migrations/0001_initial.py

+28-28
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class Migration(migrations.Migration):
9696
('end_date', models.DateField(help_text='Date that feed stops providing reliable data.', null=True, blank=True)),
9797
('version', models.CharField(help_text='Version of feed.', max_length=255, blank=True)),
9898
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
99-
('feed', models.ForeignKey(to='multigtfs.Feed')),
99+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
100100
],
101101
options={
102102
'db_table': 'feed_info',
@@ -134,8 +134,8 @@ class Migration(migrations.Migration):
134134
('text_color', models.CharField(help_text='Color of route text in hex', max_length=6, blank=True)),
135135
('geometry', django.contrib.gis.db.models.fields.MultiLineStringField(help_text='Geometry cache of Trips', srid=4326, null=True, blank=True)),
136136
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
137-
('agency', models.ForeignKey(blank=True, to='multigtfs.Agency', help_text='Agency for this route.', null=True)),
138-
('feed', models.ForeignKey(to='multigtfs.Feed')),
137+
('agency', models.ForeignKey(blank=True, to='multigtfs.Agency', help_text='Agency for this route.', null=True, on_delete=django.db.models.deletion.CASCADE)),
138+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
139139
],
140140
options={
141141
'db_table': 'route',
@@ -157,7 +157,7 @@ class Migration(migrations.Migration):
157157
('start_date', models.DateField(null=True, blank=True)),
158158
('end_date', models.DateField(null=True, blank=True)),
159159
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
160-
('feed', models.ForeignKey(to='multigtfs.Feed')),
160+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
161161
],
162162
options={
163163
'db_table': 'service',
@@ -171,7 +171,7 @@ class Migration(migrations.Migration):
171171
('date', models.DateField(help_text='Date that the service differs from the norm.')),
172172
('exception_type', models.IntegerField(default=1, help_text='Is service added or removed on this date?', choices=[(1, 'Added'), (2, 'Removed')])),
173173
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
174-
('service', models.ForeignKey(to='multigtfs.Service')),
174+
('service', models.ForeignKey(to='multigtfs.Service', on_delete=django.db.models.deletion.CASCADE)),
175175
],
176176
options={
177177
'db_table': 'service_date',
@@ -184,7 +184,7 @@ class Migration(migrations.Migration):
184184
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
185185
('shape_id', models.CharField(help_text='Unique identifier for a shape.', max_length=255, db_index=True)),
186186
('geometry', django.contrib.gis.db.models.fields.LineStringField(help_text='Geometry cache of ShapePoints', srid=4326, null=True, blank=True)),
187-
('feed', models.ForeignKey(to='multigtfs.Feed')),
187+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
188188
],
189189
options={
190190
'db_table': 'shape',
@@ -199,7 +199,7 @@ class Migration(migrations.Migration):
199199
('sequence', models.IntegerField()),
200200
('traveled', models.FloatField(help_text='Distance of point from start of shape', null=True, blank=True)),
201201
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
202-
('shape', models.ForeignKey(related_name='points', to='multigtfs.Shape')),
202+
('shape', models.ForeignKey(related_name='points', to='multigtfs.Shape', on_delete=django.db.models.deletion.CASCADE)),
203203
],
204204
options={
205205
'db_table': 'shape_point',
@@ -220,8 +220,8 @@ class Migration(migrations.Migration):
220220
('timezone', models.CharField(help_text='Timezone of the stop', max_length=255, blank=True)),
221221
('wheelchair_boarding', models.CharField(blank=True, help_text='Is wheelchair boarding possible?', max_length=1, choices=[('0', 'No information'), ('1', 'Some wheelchair boarding'), ('2', 'No wheelchair boarding')])),
222222
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
223-
('feed', models.ForeignKey(to='multigtfs.Feed')),
224-
('parent_station', models.ForeignKey(blank=True, to='multigtfs.Stop', help_text='The station associated with the stop', null=True)),
223+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
224+
('parent_station', models.ForeignKey(blank=True, to='multigtfs.Stop', help_text='The station associated with the stop', null=True, on_delete=django.db.models.deletion.CASCADE)),
225225
],
226226
options={
227227
'db_table': 'stop',
@@ -240,7 +240,7 @@ class Migration(migrations.Migration):
240240
('drop_off_type', models.CharField(blank=True, help_text='How passengers are picked up', max_length=1, choices=[('0', 'Regularly scheduled drop off'), ('1', 'No drop off available'), ('2', 'Must phone agency to arrange drop off'), ('3', 'Must coordinate with driver to arrange drop off')])),
241241
('shape_dist_traveled', models.FloatField(help_text='Distance of stop from start of shape', null=True, verbose_name='shape distance traveled', blank=True)),
242242
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
243-
('stop', models.ForeignKey(to='multigtfs.Stop')),
243+
('stop', models.ForeignKey(to='multigtfs.Stop', on_delete=django.db.models.deletion.CASCADE)),
244244
],
245245
options={
246246
'db_table': 'stop_time',
@@ -254,8 +254,8 @@ class Migration(migrations.Migration):
254254
('transfer_type', models.IntegerField(default=0, help_text='What kind of transfer?', blank=True, choices=[(0, 'Recommended transfer point'), (1, 'Timed transfer point (vehicle will wait)'), (2, 'min_transfer_time needed to successfully transfer'), (3, 'No transfers possible')])),
255255
('min_transfer_time', models.IntegerField(help_text='How many seconds are required to transfer?', null=True, blank=True)),
256256
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
257-
('from_stop', models.ForeignKey(related_name='transfer_from_stop', to='multigtfs.Stop', help_text='Stop where a connection between routes begins.')),
258-
('to_stop', models.ForeignKey(related_name='transfer_to_stop', to='multigtfs.Stop', help_text='Stop where a connection between routes ends.')),
257+
('from_stop', models.ForeignKey(related_name='transfer_from_stop', to='multigtfs.Stop', help_text='Stop where a connection between routes begins.', on_delete=django.db.models.deletion.CASCADE)),
258+
('to_stop', models.ForeignKey(related_name='transfer_to_stop', to='multigtfs.Stop', help_text='Stop where a connection between routes ends.', on_delete=django.db.models.deletion.CASCADE)),
259259
],
260260
options={
261261
'db_table': 'transfer',
@@ -274,10 +274,10 @@ class Migration(migrations.Migration):
274274
('wheelchair_accessible', models.CharField(blank=True, help_text='Are there accommodations for riders with wheelchair?', max_length=1, choices=[('0', 'No information'), ('1', 'Some wheelchair accommodation'), ('2', 'No wheelchair accommodation')])),
275275
('bikes_allowed', models.CharField(blank=True, help_text='Are bicycles allowed?', max_length=1, choices=[('0', 'No information'), ('1', 'Some bicycle accommodation'), ('2', 'No bicycles allowed')])),
276276
('extra_data', jsonfield.fields.JSONField(default={}, null=True, blank=True)),
277-
('block', models.ForeignKey(blank=True, to='multigtfs.Block', help_text='Block of sequential trips that this trip belongs to.', null=True)),
278-
('route', models.ForeignKey(to='multigtfs.Route')),
279-
('service', models.ForeignKey(blank=True, to='multigtfs.Service', null=True)),
280-
('shape', models.ForeignKey(blank=True, to='multigtfs.Shape', help_text='Shape used for this trip', null=True)),
277+
('block', models.ForeignKey(blank=True, to='multigtfs.Block', help_text='Block of sequential trips that this trip belongs to.', null=True, on_delete=django.db.models.deletion.CASCADE)),
278+
('route', models.ForeignKey(to='multigtfs.Route', on_delete=django.db.models.deletion.CASCADE)),
279+
('service', models.ForeignKey(blank=True, to='multigtfs.Service', null=True, on_delete=django.db.models.deletion.CASCADE)),
280+
('shape', models.ForeignKey(blank=True, to='multigtfs.Shape', help_text='Shape used for this trip', null=True, on_delete=django.db.models.deletion.CASCADE)),
281281
],
282282
options={
283283
'db_table': 'trip',
@@ -289,7 +289,7 @@ class Migration(migrations.Migration):
289289
fields=[
290290
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
291291
('zone_id', models.CharField(help_text='Unique identifier for a zone.', max_length=63, db_index=True)),
292-
('feed', models.ForeignKey(to='multigtfs.Feed')),
292+
('feed', models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE)),
293293
],
294294
options={
295295
'db_table': 'zone',
@@ -299,67 +299,67 @@ class Migration(migrations.Migration):
299299
migrations.AddField(
300300
model_name='stoptime',
301301
name='trip',
302-
field=models.ForeignKey(to='multigtfs.Trip'),
302+
field=models.ForeignKey(to='multigtfs.Trip', on_delete=django.db.models.deletion.CASCADE),
303303
preserve_default=True,
304304
),
305305
migrations.AddField(
306306
model_name='stop',
307307
name='zone',
308-
field=models.ForeignKey(blank=True, to='multigtfs.Zone', help_text='Fare zone for a stop ID.', null=True),
308+
field=models.ForeignKey(blank=True, to='multigtfs.Zone', help_text='Fare zone for a stop ID.', null=True, on_delete=django.db.models.deletion.CASCADE),
309309
preserve_default=True,
310310
),
311311
migrations.AddField(
312312
model_name='frequency',
313313
name='trip',
314-
field=models.ForeignKey(to='multigtfs.Trip'),
314+
field=models.ForeignKey(to='multigtfs.Trip', on_delete=django.db.models.deletion.CASCADE),
315315
preserve_default=True,
316316
),
317317
migrations.AddField(
318318
model_name='farerule',
319319
name='contains',
320-
field=models.ForeignKey(related_name='fare_contains', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel withing this zone.', null=True),
320+
field=models.ForeignKey(related_name='fare_contains', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel withing this zone.', null=True, on_delete=django.db.models.deletion.CASCADE),
321321
preserve_default=True,
322322
),
323323
migrations.AddField(
324324
model_name='farerule',
325325
name='destination',
326-
field=models.ForeignKey(related_name='fare_destinations', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel ending in this zone.', null=True),
326+
field=models.ForeignKey(related_name='fare_destinations', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel ending in this zone.', null=True, on_delete=django.db.models.deletion.CASCADE),
327327
preserve_default=True,
328328
),
329329
migrations.AddField(
330330
model_name='farerule',
331331
name='fare',
332-
field=models.ForeignKey(to='multigtfs.Fare'),
332+
field=models.ForeignKey(to='multigtfs.Fare', on_delete=django.db.models.deletion.CASCADE),
333333
preserve_default=True,
334334
),
335335
migrations.AddField(
336336
model_name='farerule',
337337
name='origin',
338-
field=models.ForeignKey(related_name='fare_origins', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel originating in this zone.', null=True),
338+
field=models.ForeignKey(related_name='fare_origins', blank=True, to='multigtfs.Zone', help_text='Fare class is valid for travel originating in this zone.', null=True, on_delete=django.db.models.deletion.CASCADE),
339339
preserve_default=True,
340340
),
341341
migrations.AddField(
342342
model_name='farerule',
343343
name='route',
344-
field=models.ForeignKey(blank=True, to='multigtfs.Route', help_text='Fare class is valid for this route.', null=True),
344+
field=models.ForeignKey(blank=True, to='multigtfs.Route', help_text='Fare class is valid for this route.', null=True, on_delete=django.db.models.deletion.CASCADE),
345345
preserve_default=True,
346346
),
347347
migrations.AddField(
348348
model_name='fare',
349349
name='feed',
350-
field=models.ForeignKey(to='multigtfs.Feed'),
350+
field=models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE),
351351
preserve_default=True,
352352
),
353353
migrations.AddField(
354354
model_name='block',
355355
name='feed',
356-
field=models.ForeignKey(to='multigtfs.Feed'),
356+
field=models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE),
357357
preserve_default=True,
358358
),
359359
migrations.AddField(
360360
model_name='agency',
361361
name='feed',
362-
field=models.ForeignKey(to='multigtfs.Feed'),
362+
field=models.ForeignKey(to='multigtfs.Feed', on_delete=django.db.models.deletion.CASCADE),
363363
preserve_default=True,
364364
),
365365
]
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('multigtfs', '0001_initial'),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name='farerule',
17+
name='contains',
18+
field=models.ForeignKey(blank=True, null=True, help_text='Fare class is valid for travel withing this zone.', related_name='fare_contains', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Zone'),
19+
),
20+
migrations.AlterField(
21+
model_name='farerule',
22+
name='destination',
23+
field=models.ForeignKey(blank=True, null=True, help_text='Fare class is valid for travel ending in this zone.', related_name='fare_destinations', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Zone'),
24+
),
25+
migrations.AlterField(
26+
model_name='farerule',
27+
name='origin',
28+
field=models.ForeignKey(blank=True, null=True, help_text='Fare class is valid for travel originating in this zone.', related_name='fare_origins', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Zone'),
29+
),
30+
migrations.AlterField(
31+
model_name='farerule',
32+
name='route',
33+
field=models.ForeignKey(blank=True, null=True, help_text='Fare class is valid for this route.', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Route'),
34+
),
35+
migrations.AlterField(
36+
model_name='route',
37+
name='agency',
38+
field=models.ForeignKey(blank=True, null=True, help_text='Agency for this route.', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Agency'),
39+
),
40+
migrations.AlterField(
41+
model_name='stop',
42+
name='parent_station',
43+
field=models.ForeignKey(blank=True, null=True, help_text='The station associated with the stop', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Stop'),
44+
),
45+
migrations.AlterField(
46+
model_name='stop',
47+
name='zone',
48+
field=models.ForeignKey(blank=True, null=True, help_text='Fare zone for a stop ID.', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Zone'),
49+
),
50+
migrations.AlterField(
51+
model_name='trip',
52+
name='block',
53+
field=models.ForeignKey(blank=True, null=True, help_text='Block of sequential trips that this trip belongs to.', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Block'),
54+
),
55+
migrations.AlterField(
56+
model_name='trip',
57+
name='service',
58+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Service'),
59+
),
60+
migrations.AlterField(
61+
model_name='trip',
62+
name='shape',
63+
field=models.ForeignKey(blank=True, null=True, help_text='Shape used for this trip', on_delete=django.db.models.deletion.SET_NULL, to='multigtfs.Shape'),
64+
),
65+
]

multigtfs/models/agency.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Agency(Base):
2727
2828
Maps to agency.txt in the GTFS feed.
2929
"""
30-
feed = models.ForeignKey('Feed')
30+
feed = models.ForeignKey('Feed', on_delete=models.CASCADE)
3131
agency_id = models.CharField(
3232
max_length=255, blank=True, db_index=True,
3333
help_text="Unique identifier for transit agency")

multigtfs/models/block.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Block(Base):
2727
This data is not represented as a file in the GTFS. It appears as an
2828
identifier in the trip table.
2929
"""
30-
feed = models.ForeignKey('Feed')
30+
feed = models.ForeignKey('Feed', on_delete=models.CASCADE)
3131
block_id = models.CharField(
3232
max_length=63, db_index=True,
3333
help_text="Unique identifier for a block.")

multigtfs/models/fare.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
class Fare(Base):
2525
"""A fare class"""
2626

27-
feed = models.ForeignKey('Feed')
27+
feed = models.ForeignKey('Feed', on_delete=models.CASCADE)
2828
fare_id = models.CharField(
2929
max_length=255, db_index=True,
3030
help_text="Unique identifier for a fare class")

multigtfs/models/fare_rule.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,20 @@
2323
@python_2_unicode_compatible
2424
class FareRule(Base):
2525
"""Associate a Fare with a Route and/or Zones"""
26-
fare = models.ForeignKey('Fare')
26+
fare = models.ForeignKey('Fare', on_delete=models.CASCADE)
2727
route = models.ForeignKey(
28-
'Route', null=True, blank=True,
28+
'Route', null=True, blank=True, on_delete=models.SET_NULL,
2929
help_text="Fare class is valid for this route.")
3030
origin = models.ForeignKey(
31-
'Zone', null=True, blank=True,
31+
'Zone', null=True, blank=True, on_delete=models.SET_NULL,
3232
related_name='fare_origins',
3333
help_text="Fare class is valid for travel originating in this zone.")
3434
destination = models.ForeignKey(
35-
'Zone', null=True, blank=True,
35+
'Zone', null=True, blank=True, on_delete=models.SET_NULL,
3636
related_name='fare_destinations',
3737
help_text="Fare class is valid for travel ending in this zone.")
3838
contains = models.ForeignKey(
39-
'Zone', null=True, blank=True,
39+
'Zone', null=True, blank=True, on_delete=models.SET_NULL,
4040
related_name='fare_contains',
4141
help_text="Fare class is valid for travel withing this zone.")
4242
extra_data = JSONField(default={}, blank=True, null=True)

multigtfs/models/feed_info.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class FeedInfo(Base):
2626
2727
Implements feed_info.txt in the GTFS feed.
2828
"""
29-
feed = models.ForeignKey('Feed')
29+
feed = models.ForeignKey('Feed', on_delete=models.CASCADE)
3030
publisher_name = models.CharField(
3131
max_length=255,
3232
help_text="Full name of organization that publishes the feed.")

0 commit comments

Comments
 (0)