浏览代码

Django 1.7 fixes for demo site

* Use SILENCED_SYSTEM_CHECKS warning instead of test runner hack to
  avoid the warning about a change in default test runners
* Conditionally use south in the demo settings
* Add native migrations and app configs for forked apps
master
Maik Hoepfel 11 年前
父节点
当前提交
8d6f7360ad

+ 1
- 0
sites/demo/apps/order/__init__.py 查看文件

@@ -0,0 +1 @@
1
+default_app_config = 'apps.order.config.OrderConfig'

+ 5
- 0
sites/demo/apps/order/config.py 查看文件

@@ -0,0 +1,5 @@
1
+from oscar.apps.order import config
2
+
3
+
4
+class OrderConfig(config.OrderConfig):
5
+    name = 'apps.order'

+ 394
- 0
sites/demo/apps/order/migrations/0001_initial.py 查看文件

@@ -0,0 +1,394 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+import oscar.models.fields
7
+import django.db.models.deletion
8
+from django.conf import settings
9
+
10
+
11
+class Migration(migrations.Migration):
12
+
13
+    dependencies = [
14
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
+        ('address', '0001_initial'),
16
+        ('sites', '__latest__'),
17
+        ('partner', '0001_initial'),
18
+        ('customer', '0001_initial'),
19
+        ('catalogue', '0001_initial'),
20
+        ('basket', '0001_initial'),
21
+    ]
22
+
23
+    operations = [
24
+        migrations.CreateModel(
25
+            name='BillingAddress',
26
+            fields=[
27
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
28
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
29
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
30
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
31
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
32
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
33
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
34
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
35
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
36
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
37
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
38
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
39
+            ],
40
+            options={
41
+                'abstract': False,
42
+                'verbose_name': 'Billing address',
43
+                'verbose_name_plural': 'Billing addresses',
44
+            },
45
+            bases=(models.Model,),
46
+        ),
47
+        migrations.CreateModel(
48
+            name='CommunicationEvent',
49
+            fields=[
50
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
51
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
52
+                ('event_type', models.ForeignKey(verbose_name='Event Type', to='customer.CommunicationEventType')),
53
+            ],
54
+            options={
55
+                'ordering': [b'-date_created'],
56
+                'abstract': False,
57
+                'verbose_name': 'Communication Event',
58
+                'verbose_name_plural': 'Communication Events',
59
+            },
60
+            bases=(models.Model,),
61
+        ),
62
+        migrations.CreateModel(
63
+            name='Line',
64
+            fields=[
65
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
66
+                ('partner_name', models.CharField(max_length=128, verbose_name='Partner name', blank=True)),
67
+                ('partner_sku', models.CharField(max_length=128, verbose_name='Partner SKU')),
68
+                ('partner_line_reference', models.CharField(help_text='This is the item number that the partner uses within their system', max_length=128, verbose_name='Partner reference', blank=True)),
69
+                ('partner_line_notes', models.TextField(verbose_name='Partner Notes', blank=True)),
70
+                ('title', models.CharField(max_length=255, verbose_name='Title')),
71
+                ('upc', models.CharField(max_length=128, null=True, verbose_name='UPC', blank=True)),
72
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
73
+                ('line_price_incl_tax', models.DecimalField(verbose_name='Price (inc. tax)', max_digits=12, decimal_places=2)),
74
+                ('line_price_excl_tax', models.DecimalField(verbose_name='Price (excl. tax)', max_digits=12, decimal_places=2)),
75
+                ('line_price_before_discounts_incl_tax', models.DecimalField(verbose_name='Price before discounts (inc. tax)', max_digits=12, decimal_places=2)),
76
+                ('line_price_before_discounts_excl_tax', models.DecimalField(verbose_name='Price before discounts (excl. tax)', max_digits=12, decimal_places=2)),
77
+                ('unit_cost_price', models.DecimalField(null=True, verbose_name='Unit Cost Price', max_digits=12, decimal_places=2, blank=True)),
78
+                ('unit_price_incl_tax', models.DecimalField(null=True, verbose_name='Unit Price (inc. tax)', max_digits=12, decimal_places=2, blank=True)),
79
+                ('unit_price_excl_tax', models.DecimalField(null=True, verbose_name='Unit Price (excl. tax)', max_digits=12, decimal_places=2, blank=True)),
80
+                ('unit_retail_price', models.DecimalField(null=True, verbose_name='Unit Retail Price', max_digits=12, decimal_places=2, blank=True)),
81
+                ('status', models.CharField(max_length=255, verbose_name='Status', blank=True)),
82
+                ('est_dispatch_date', models.DateField(null=True, verbose_name='Estimated Dispatch Date', blank=True)),
83
+                ('partner', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Partner', blank=True, to='partner.Partner', null=True)),
84
+                ('product', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Product', blank=True, to='catalogue.Product', null=True)),
85
+                ('stockrecord', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Stock record', blank=True, to='partner.StockRecord', null=True)),
86
+            ],
87
+            options={
88
+                'abstract': False,
89
+                'verbose_name': 'Order Line',
90
+                'verbose_name_plural': 'Order Lines',
91
+            },
92
+            bases=(models.Model,),
93
+        ),
94
+        migrations.CreateModel(
95
+            name='LineAttribute',
96
+            fields=[
97
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
98
+                ('type', models.CharField(max_length=128, verbose_name='Type')),
99
+                ('value', models.CharField(max_length=255, verbose_name='Value')),
100
+                ('line', models.ForeignKey(verbose_name='Line', to='order.Line')),
101
+                ('option', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Option', to='catalogue.Option', null=True)),
102
+            ],
103
+            options={
104
+                'abstract': False,
105
+                'verbose_name': 'Line Attribute',
106
+                'verbose_name_plural': 'Line Attributes',
107
+            },
108
+            bases=(models.Model,),
109
+        ),
110
+        migrations.CreateModel(
111
+            name='LinePrice',
112
+            fields=[
113
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
114
+                ('quantity', models.PositiveIntegerField(default=1, verbose_name='Quantity')),
115
+                ('price_incl_tax', models.DecimalField(verbose_name='Price (inc. tax)', max_digits=12, decimal_places=2)),
116
+                ('price_excl_tax', models.DecimalField(verbose_name='Price (excl. tax)', max_digits=12, decimal_places=2)),
117
+                ('shipping_incl_tax', models.DecimalField(default=0, verbose_name='Shiping (inc. tax)', max_digits=12, decimal_places=2)),
118
+                ('shipping_excl_tax', models.DecimalField(default=0, verbose_name='Shipping (excl. tax)', max_digits=12, decimal_places=2)),
119
+                ('line', models.ForeignKey(verbose_name='Line', to='order.Line')),
120
+            ],
121
+            options={
122
+                'ordering': (b'id',),
123
+                'abstract': False,
124
+                'verbose_name': 'Line Price',
125
+                'verbose_name_plural': 'Line Prices',
126
+            },
127
+            bases=(models.Model,),
128
+        ),
129
+        migrations.CreateModel(
130
+            name='Order',
131
+            fields=[
132
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
133
+                ('number', models.CharField(unique=True, max_length=128, verbose_name='Order number', db_index=True)),
134
+                ('currency', models.CharField(default=b'GBP', max_length=12, verbose_name='Currency')),
135
+                ('total_incl_tax', models.DecimalField(verbose_name='Order total (inc. tax)', max_digits=12, decimal_places=2)),
136
+                ('total_excl_tax', models.DecimalField(verbose_name='Order total (excl. tax)', max_digits=12, decimal_places=2)),
137
+                ('shipping_incl_tax', models.DecimalField(default=0, verbose_name='Shipping charge (inc. tax)', max_digits=12, decimal_places=2)),
138
+                ('shipping_excl_tax', models.DecimalField(default=0, verbose_name='Shipping charge (excl. tax)', max_digits=12, decimal_places=2)),
139
+                ('shipping_method', models.CharField(max_length=128, verbose_name='Shipping method', blank=True)),
140
+                ('shipping_code', models.CharField(default=b'', max_length=128, blank=True)),
141
+                ('status', models.CharField(max_length=100, verbose_name='Status', blank=True)),
142
+                ('guest_email', models.EmailField(max_length=75, verbose_name='Guest email address', blank=True)),
143
+                ('date_placed', models.DateTimeField(auto_now_add=True, db_index=True)),
144
+                ('basket', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Basket', blank=True, to='basket.Basket', null=True)),
145
+                ('billing_address', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Billing Address', blank=True, to='order.BillingAddress', null=True)),
146
+                ('site', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Site', to='sites.Site', null=True)),
147
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
148
+            ],
149
+            options={
150
+                'ordering': [b'-date_placed'],
151
+                'abstract': False,
152
+                'verbose_name': 'Order',
153
+                'verbose_name_plural': 'Orders',
154
+            },
155
+            bases=(models.Model,),
156
+        ),
157
+        migrations.AddField(
158
+            model_name='lineprice',
159
+            name='order',
160
+            field=models.ForeignKey(verbose_name='Option', to='order.Order'),
161
+            preserve_default=True,
162
+        ),
163
+        migrations.AddField(
164
+            model_name='line',
165
+            name='order',
166
+            field=models.ForeignKey(verbose_name='Order', to='order.Order'),
167
+            preserve_default=True,
168
+        ),
169
+        migrations.AddField(
170
+            model_name='communicationevent',
171
+            name='order',
172
+            field=models.ForeignKey(verbose_name='Order', to='order.Order'),
173
+            preserve_default=True,
174
+        ),
175
+        migrations.CreateModel(
176
+            name='OrderDiscount',
177
+            fields=[
178
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
179
+                ('category', models.CharField(default=b'Basket', max_length=64, verbose_name='Discount category', choices=[(b'Basket', 'Basket'), (b'Shipping', 'Shipping'), (b'Deferred', 'Deferred')])),
180
+                ('offer_id', models.PositiveIntegerField(null=True, verbose_name='Offer ID', blank=True)),
181
+                ('offer_name', models.CharField(db_index=True, max_length=128, verbose_name='Offer name', blank=True)),
182
+                ('voucher_id', models.PositiveIntegerField(null=True, verbose_name='Voucher ID', blank=True)),
183
+                ('voucher_code', models.CharField(db_index=True, max_length=128, verbose_name='Code', blank=True)),
184
+                ('frequency', models.PositiveIntegerField(null=True, verbose_name='Frequency')),
185
+                ('amount', models.DecimalField(default=0, verbose_name='Amount', max_digits=12, decimal_places=2)),
186
+                ('message', models.TextField(blank=True)),
187
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
188
+            ],
189
+            options={
190
+                'abstract': False,
191
+                'verbose_name': 'Order Discount',
192
+                'verbose_name_plural': 'Order Discounts',
193
+            },
194
+            bases=(models.Model,),
195
+        ),
196
+        migrations.CreateModel(
197
+            name='OrderNote',
198
+            fields=[
199
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
200
+                ('note_type', models.CharField(max_length=128, verbose_name='Note Type', blank=True)),
201
+                ('message', models.TextField(verbose_name='Message')),
202
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
203
+                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date Updated')),
204
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
205
+                ('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL, null=True)),
206
+            ],
207
+            options={
208
+                'abstract': False,
209
+                'verbose_name': 'Order Note',
210
+                'verbose_name_plural': 'Order Notes',
211
+            },
212
+            bases=(models.Model,),
213
+        ),
214
+        migrations.CreateModel(
215
+            name='PaymentEvent',
216
+            fields=[
217
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
218
+                ('amount', models.DecimalField(verbose_name='Amount', max_digits=12, decimal_places=2)),
219
+                ('reference', models.CharField(max_length=128, verbose_name='Reference', blank=True)),
220
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
221
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
222
+            ],
223
+            options={
224
+                'ordering': [b'-date_created'],
225
+                'abstract': False,
226
+                'verbose_name': 'Payment Event',
227
+                'verbose_name_plural': 'Payment Events',
228
+            },
229
+            bases=(models.Model,),
230
+        ),
231
+        migrations.CreateModel(
232
+            name='PaymentEventQuantity',
233
+            fields=[
234
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
235
+                ('quantity', models.PositiveIntegerField(verbose_name='Quantity')),
236
+            ],
237
+            options={
238
+                'verbose_name': 'Payment Event Quantity',
239
+                'verbose_name_plural': 'Payment Event Quantities',
240
+            },
241
+            bases=(models.Model,),
242
+        ),
243
+        migrations.AddField(
244
+            model_name='paymentevent',
245
+            name='lines',
246
+            field=models.ManyToManyField(to='order.Line', verbose_name='Lines', through='order.PaymentEventQuantity'),
247
+            preserve_default=True,
248
+        ),
249
+        migrations.AddField(
250
+            model_name='paymenteventquantity',
251
+            name='event',
252
+            field=models.ForeignKey(verbose_name='Event', to='order.PaymentEvent'),
253
+            preserve_default=True,
254
+        ),
255
+        migrations.AddField(
256
+            model_name='paymenteventquantity',
257
+            name='line',
258
+            field=models.ForeignKey(verbose_name='Line', to='order.Line'),
259
+            preserve_default=True,
260
+        ),
261
+        migrations.AlterUniqueTogether(
262
+            name='paymenteventquantity',
263
+            unique_together=set([(b'event', b'line')]),
264
+        ),
265
+        migrations.CreateModel(
266
+            name='PaymentEventType',
267
+            fields=[
268
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
269
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
270
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
271
+            ],
272
+            options={
273
+                'ordering': (b'name',),
274
+                'abstract': False,
275
+                'verbose_name': 'Payment Event Type',
276
+                'verbose_name_plural': 'Payment Event Types',
277
+            },
278
+            bases=(models.Model,),
279
+        ),
280
+        migrations.AddField(
281
+            model_name='paymentevent',
282
+            name='event_type',
283
+            field=models.ForeignKey(verbose_name='Event Type', to='order.PaymentEventType'),
284
+            preserve_default=True,
285
+        ),
286
+        migrations.CreateModel(
287
+            name='ShippingAddress',
288
+            fields=[
289
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
290
+                ('title', models.CharField(blank=True, max_length=64, verbose_name='Title', choices=[(b'Mr', 'Mr'), (b'Miss', 'Miss'), (b'Mrs', 'Mrs'), (b'Ms', 'Ms'), (b'Dr', 'Dr')])),
291
+                ('first_name', models.CharField(max_length=255, verbose_name='First name', blank=True)),
292
+                ('last_name', models.CharField(max_length=255, verbose_name='Last name', blank=True)),
293
+                ('line1', models.CharField(max_length=255, verbose_name='First line of address')),
294
+                ('line2', models.CharField(max_length=255, verbose_name='Second line of address', blank=True)),
295
+                ('line3', models.CharField(max_length=255, verbose_name='Third line of address', blank=True)),
296
+                ('line4', models.CharField(max_length=255, verbose_name='City', blank=True)),
297
+                ('state', models.CharField(max_length=255, verbose_name='State/County', blank=True)),
298
+                ('postcode', oscar.models.fields.UppercaseCharField(max_length=64, verbose_name='Post/Zip-code', blank=True)),
299
+                ('search_text', models.TextField(verbose_name='Search text - used only for searching addresses', editable=False)),
300
+                ('phone_number', oscar.models.fields.PhoneNumberField(help_text='In case we need to call you about your order', verbose_name='Phone number', blank=True)),
301
+                ('notes', models.TextField(help_text='Tell us anything we should know when delivering your order.', verbose_name='Instructions', blank=True)),
302
+                ('country', models.ForeignKey(verbose_name='Country', to='address.Country')),
303
+            ],
304
+            options={
305
+                'abstract': False,
306
+                'verbose_name': 'Shipping address',
307
+                'verbose_name_plural': 'Shipping addresses',
308
+            },
309
+            bases=(models.Model,),
310
+        ),
311
+        migrations.AddField(
312
+            model_name='order',
313
+            name='shipping_address',
314
+            field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, verbose_name='Shipping Address', blank=True, to='order.ShippingAddress', null=True),
315
+            preserve_default=True,
316
+        ),
317
+        migrations.CreateModel(
318
+            name='ShippingEvent',
319
+            fields=[
320
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
321
+                ('notes', models.TextField(help_text='This could be the dispatch reference, or a tracking number', verbose_name='Event notes', blank=True)),
322
+                ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date Created')),
323
+                ('order', models.ForeignKey(verbose_name='Order', to='order.Order')),
324
+            ],
325
+            options={
326
+                'ordering': [b'-date_created'],
327
+                'abstract': False,
328
+                'verbose_name': 'Shipping Event',
329
+                'verbose_name_plural': 'Shipping Events',
330
+            },
331
+            bases=(models.Model,),
332
+        ),
333
+        migrations.AddField(
334
+            model_name='paymentevent',
335
+            name='shipping_event',
336
+            field=models.ForeignKey(to='order.ShippingEvent', null=True),
337
+            preserve_default=True,
338
+        ),
339
+        migrations.CreateModel(
340
+            name='ShippingEventQuantity',
341
+            fields=[
342
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
343
+                ('quantity', models.PositiveIntegerField(verbose_name='Quantity')),
344
+            ],
345
+            options={
346
+                'verbose_name': 'Shipping Event Quantity',
347
+                'verbose_name_plural': 'Shipping Event Quantities',
348
+            },
349
+            bases=(models.Model,),
350
+        ),
351
+        migrations.AddField(
352
+            model_name='shippingevent',
353
+            name='lines',
354
+            field=models.ManyToManyField(to='order.Line', verbose_name='Lines', through='order.ShippingEventQuantity'),
355
+            preserve_default=True,
356
+        ),
357
+        migrations.AddField(
358
+            model_name='shippingeventquantity',
359
+            name='event',
360
+            field=models.ForeignKey(verbose_name='Event', to='order.ShippingEvent'),
361
+            preserve_default=True,
362
+        ),
363
+        migrations.AddField(
364
+            model_name='shippingeventquantity',
365
+            name='line',
366
+            field=models.ForeignKey(verbose_name='Line', to='order.Line'),
367
+            preserve_default=True,
368
+        ),
369
+        migrations.AlterUniqueTogether(
370
+            name='shippingeventquantity',
371
+            unique_together=set([(b'event', b'line')]),
372
+        ),
373
+        migrations.CreateModel(
374
+            name='ShippingEventType',
375
+            fields=[
376
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
377
+                ('name', models.CharField(unique=True, max_length=255, verbose_name='Name')),
378
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Code')),
379
+            ],
380
+            options={
381
+                'ordering': (b'name',),
382
+                'abstract': False,
383
+                'verbose_name': 'Shipping Event Type',
384
+                'verbose_name_plural': 'Shipping Event Types',
385
+            },
386
+            bases=(models.Model,),
387
+        ),
388
+        migrations.AddField(
389
+            model_name='shippingevent',
390
+            name='event_type',
391
+            field=models.ForeignKey(verbose_name='Event Type', to='order.ShippingEventType'),
392
+            preserve_default=True,
393
+        ),
394
+    ]

+ 0
- 0
sites/demo/apps/order/migrations/__init__.py 查看文件


+ 1
- 0
sites/demo/apps/shipping/__init__.py 查看文件

@@ -0,0 +1 @@
1
+default_app_config = 'apps.shipping.config.ShippingConfig'

+ 5
- 0
sites/demo/apps/shipping/config.py 查看文件

@@ -0,0 +1,5 @@
1
+from django.apps import AppConfig
2
+
3
+
4
+class ShippingConfig(AppConfig):
5
+    name = 'apps.shipping'

+ 76
- 0
sites/demo/apps/shipping/migrations/0001_initial.py 查看文件

@@ -0,0 +1,76 @@
1
+# -*- coding: utf-8 -*-
2
+from __future__ import unicode_literals
3
+
4
+from django.db import models, migrations
5
+import oscar.models.fields.autoslugfield
6
+from decimal import Decimal
7
+import django.core.validators
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('address', '0001_initial'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='OrderAndItemCharges',
19
+            fields=[
20
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
21
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
22
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
23
+                ('description', models.TextField(verbose_name='Description', blank=True)),
24
+                ('price_per_order', models.DecimalField(default=Decimal('0.00'), verbose_name='Price per order', max_digits=12, decimal_places=2)),
25
+                ('price_per_item', models.DecimalField(default=Decimal('0.00'), verbose_name='Price per item', max_digits=12, decimal_places=2)),
26
+                ('free_shipping_threshold', models.DecimalField(null=True, verbose_name='Free Shipping', max_digits=12, decimal_places=2, blank=True)),
27
+                ('countries', models.ManyToManyField(to='address.Country', null=True, verbose_name='Countries', blank=True)),
28
+            ],
29
+            options={
30
+                'ordering': [b'name'],
31
+                'abstract': False,
32
+                'verbose_name': 'Order and Item Charge',
33
+                'verbose_name_plural': 'Order and Item Charges',
34
+            },
35
+            bases=(models.Model,),
36
+        ),
37
+        migrations.CreateModel(
38
+            name='WeightBand',
39
+            fields=[
40
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
41
+                ('upper_limit', models.DecimalField(help_text='Enter upper limit of this weight band in kg. The lower limit will be determined by the other weight bands.', verbose_name='Upper Limit', max_digits=12, decimal_places=3, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))])),
42
+                ('charge', models.DecimalField(verbose_name='Charge', max_digits=12, decimal_places=2, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))])),
43
+            ],
44
+            options={
45
+                'ordering': [b'method', b'upper_limit'],
46
+                'abstract': False,
47
+                'verbose_name': 'Weight Band',
48
+                'verbose_name_plural': 'Weight Bands',
49
+            },
50
+            bases=(models.Model,),
51
+        ),
52
+        migrations.CreateModel(
53
+            name='WeightBased',
54
+            fields=[
55
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
56
+                ('code', oscar.models.fields.autoslugfield.AutoSlugField(populate_from=b'name', editable=False, max_length=128, blank=True, unique=True, verbose_name='Slug')),
57
+                ('name', models.CharField(unique=True, max_length=128, verbose_name='Name')),
58
+                ('description', models.TextField(verbose_name='Description', blank=True)),
59
+                ('default_weight', models.DecimalField(decimal_places=3, default=Decimal('0.000'), max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.00'))], help_text='Default product weight in kg when no weight attribute is defined', verbose_name='Default Weight')),
60
+                ('countries', models.ManyToManyField(to='address.Country', null=True, verbose_name='Countries', blank=True)),
61
+            ],
62
+            options={
63
+                'ordering': [b'name'],
64
+                'abstract': False,
65
+                'verbose_name': 'Weight-based Shipping Method',
66
+                'verbose_name_plural': 'Weight-based Shipping Methods',
67
+            },
68
+            bases=(models.Model,),
69
+        ),
70
+        migrations.AddField(
71
+            model_name='weightband',
72
+            name='method',
73
+            field=models.ForeignKey(verbose_name='Method', to='shipping.WeightBased'),
74
+            preserve_default=True,
75
+        ),
76
+    ]

+ 0
- 0
sites/demo/apps/shipping/migrations/__init__.py 查看文件


+ 9
- 1
sites/demo/settings.py 查看文件

@@ -43,6 +43,10 @@ CACHES = {
43 43
     }
44 44
 }
45 45
 
46
+# Prevent Django 1.7+ from showing a warning regarding a changed default test
47
+# runner. The Oscar test suite is run with nose, so it does not matter.
48
+SILENCED_SYSTEM_CHECKS = ['1_6.W001', ]
49
+
46 50
 # Local time zone for this installation. Choices can be found here:
47 51
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
48 52
 # although not all choices may be available on all operating systems.
@@ -231,7 +235,6 @@ INSTALLED_APPS = [
231 235
     'django.contrib.gis',
232 236
     # Oscar dependencies
233 237
     'compressor',
234
-    'south',
235 238
     # Oscar extensions
236 239
     'stores',
237 240
     'paypal',
@@ -245,6 +248,11 @@ INSTALLED_APPS = [
245 248
     'raven.contrib.django.raven_compat'
246 249
 ]
247 250
 
251
+# South is only supported in Django < 1.7
252
+import django
253
+if django.VERSION < (1, 7):
254
+    INSTALLED_APPS.append('south')
255
+
248 256
 # Include core apps with a few overrides:
249 257
 # - a shipping override app to provide some shipping methods
250 258
 # - an order app to provide order processing logic

+ 3
- 6
sites/sandbox/settings.py 查看文件

@@ -42,12 +42,9 @@ CACHES = {
42 42
     }
43 43
 }
44 44
 
45
-# Django 1.7 changes the test runner default and tries to be helpful by
46
-# alerting the user if the project looks like a pre-1.7 Django project by
47
-# looking at various settings. We don't have any tests for the sandbox,
48
-# but setting an explicit test runner disables the warning
49
-TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
50
-
45
+# Prevent Django 1.7+ from showing a warning regarding a changed default test
46
+# runner. The Oscar test suite is run with nose, so it does not matter.
47
+SILENCED_SYSTEM_CHECKS = ['1_6.W001', ]
51 48
 
52 49
 # Local time zone for this installation. Choices can be found here:
53 50
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name

+ 2
- 2
tests/config.py 查看文件

@@ -102,8 +102,8 @@ def configure():
102 102
 
103 103
             # Setting this explicitly prevents Django 1.7+ from showing a
104 104
             # warning regarding a changed default test runner. The Oscar test
105
-            # suite is run with nose anyway, so the value does not matter.
106
-            'TEST_RUNNER': 'foobar',
105
+            # suite is run with nose, so it does not matter.
106
+            'SILENCED_SYSTEM_CHECKS': ['1_6.W001'],
107 107
         })
108 108
 
109 109
         settings.configure(**test_settings)

正在加载...
取消
保存