瀏覽代碼

Add US-specific demo site

This simple site illustrates how to use Oscar for a US-specific site.
It's intended to help developers build Oscar sites for the US.

It can be built using:

    $ make us_site

This will build the database and load some sample products.

The key changes from core Oscar are:

- Setting the default currency to USD in settings.
- Overriding Oscar's partner app so we can specify out own Selector
  class which returns the US strategy. This ensures all prices are shown
  without tax.
- Overriding the checkout session mixin so we can apply taxes to the
  submission and also pass a template variable that specifies taxes
  should be broken out separately. We use a dummy tax module that
  applies very simple taxes to the submission.
- Overriding the checkout shipping address form so we can force the
  state field to use the US state dropdown.
master
David Winterbottom 11 年之前
父節點
當前提交
0e287cc3b9
共有 38 個文件被更改,包括 6797 次插入1 次删除
  1. 2
    0
      .gitignore
  2. 12
    0
      Makefile
  3. 1
    0
      requirements_us.txt
  4. 259
    1
      sites/demo/fixtures/books.csv
  5. 6
    0
      sites/us/README.rst
  6. 0
    0
      sites/us/__init__.py
  7. 0
    0
      sites/us/apps/__init__.py
  8. 0
    0
      sites/us/apps/checkout/__init__.py
  9. 12
    0
      sites/us/apps/checkout/forms.py
  10. 21
    0
      sites/us/apps/checkout/migrations/0001_initial.py
  11. 0
    0
      sites/us/apps/checkout/migrations/__init__.py
  12. 0
    0
      sites/us/apps/checkout/models.py
  13. 32
    0
      sites/us/apps/checkout/session.py
  14. 1
    0
      sites/us/apps/checkout/views.py
  15. 0
    0
      sites/us/apps/partner/__init__.py
  16. 226
    0
      sites/us/apps/partner/migrations/0001_initial.py
  17. 233
    0
      sites/us/apps/partner/migrations/0002_auto__add_stockalert__add_abstractstockalert__add_field_stockrecord_lo.py
  18. 204
    0
      sites/us/apps/partner/migrations/0003_auto__add_unique_stockrecord_partner_partner_sku.py
  19. 209
    0
      sites/us/apps/partner/migrations/0004_auto__add_field_partner_code.py
  20. 209
    0
      sites/us/apps/partner/migrations/0005_populate_slugs.py
  21. 207
    0
      sites/us/apps/partner/migrations/0006_auto__add_unique_partner_code.py
  22. 213
    0
      sites/us/apps/partner/migrations/0007_auto__chg_field_partner_name__del_unique_partner_name.py
  23. 202
    0
      sites/us/apps/partner/migrations/0008_auto__del_abstractstockalert__del_field_stockalert_abstractstockalert_.py
  24. 245
    0
      sites/us/apps/partner/migrations/0009_auto__add_partneraddress.py
  25. 236
    0
      sites/us/apps/partner/migrations/0010_auto__chg_field_stockrecord_product__del_unique_stockrecord_product.py
  26. 232
    0
      sites/us/apps/partner/migrations/0011_auto__chg_field_partner_code.py
  27. 235
    0
      sites/us/apps/partner/migrations/0012_no_null_in_charfields.py
  28. 273
    0
      sites/us/apps/partner/migrations/0013_auto__chg_field_partneraddress_first_name__chg_field_partneraddress_ti.py
  29. 0
    0
      sites/us/apps/partner/migrations/__init__.py
  30. 1
    0
      sites/us/apps/partner/models.py
  31. 7
    0
      sites/us/apps/partner/strategy.py
  32. 35
    0
      sites/us/apps/tax.py
  33. 2930
    0
      sites/us/fixtures/countries.json
  34. 93
    0
      sites/us/fixtures/product-attributes.json
  35. 13
    0
      sites/us/fixtures/product-classes.json
  36. 10
    0
      sites/us/manage.py
  37. 403
    0
      sites/us/settings.py
  38. 35
    0
      sites/us/urls.py

+ 2
- 0
.gitignore 查看文件

@@ -46,4 +46,6 @@ settings_local.py
46 46
 /sites/demo/public/
47 47
 /sites/demo/whoosh_index/
48 48
 /sites/demo/logs/
49
+/sites/us/public/
50
+/sites/us/logs/
49 51
 sites/puppet/modules/

+ 12
- 0
Makefile 查看文件

@@ -48,6 +48,18 @@ demo: install
48 48
 	sites/demo/manage.py clear_index --noinput
49 49
 	sites/demo/manage.py update_index catalogue
50 50
 
51
+us_site: install
52
+	# Install additional requirements
53
+	pip install -r requirements_us.txt
54
+	# Create database
55
+	sites/us/manage.py reset_db --router=default --noinput
56
+	sites/us/manage.py syncdb --noinput
57
+	sites/us/manage.py migrate
58
+	# Import some core fixtures
59
+	sites/us/manage.py loaddata sites/us/fixtures/*.json
60
+	# Create catalogue (using a fixture from the demo site)
61
+	sites/us/manage.py create_demo_products --class=Books sites/demo/fixtures/books.csv
62
+
51 63
 docs:
52 64
 	cd docs && make html
53 65
 

+ 1
- 0
requirements_us.txt 查看文件

@@ -0,0 +1 @@
1
+django-localflavor==1.0

+ 259
- 1
sites/demo/fixtures/books.csv
文件差異過大導致無法顯示
查看文件


+ 6
- 0
sites/us/README.rst 查看文件

@@ -0,0 +1,6 @@
1
+=======
2
+US site
3
+=======
4
+
5
+This is a simple Oscar site configured to sell products in USD with taxes only
6
+calculated during checkout.

+ 0
- 0
sites/us/__init__.py 查看文件


+ 0
- 0
sites/us/apps/__init__.py 查看文件


+ 0
- 0
sites/us/apps/checkout/__init__.py 查看文件


+ 12
- 0
sites/us/apps/checkout/forms.py 查看文件

@@ -0,0 +1,12 @@
1
+from django.utils.translation import ugettext_lazy as _
2
+from localflavor.us import forms as us_forms
3
+
4
+from oscar.apps.checkout import forms as checkout_forms
5
+
6
+
7
+class ShippingAddressForm(checkout_forms.ShippingAddressForm):
8
+    state = us_forms.USStateField(label="State", widget=us_forms.USStateSelect)
9
+
10
+    def __init__(self, *args, **kwargs):
11
+        super(ShippingAddressForm, self).__init__(*args, **kwargs)
12
+        self.fields['postcode'].label = _("Zip code")

+ 21
- 0
sites/us/apps/checkout/migrations/0001_initial.py 查看文件

@@ -0,0 +1,21 @@
1
+# encoding: utf-8
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+
7
+class Migration(SchemaMigration):
8
+
9
+    def forwards(self, orm):
10
+        pass
11
+
12
+
13
+    def backwards(self, orm):
14
+        pass
15
+
16
+
17
+    models = {
18
+        
19
+    }
20
+
21
+    complete_apps = ['checkout']

+ 0
- 0
sites/us/apps/checkout/migrations/__init__.py 查看文件


+ 0
- 0
sites/us/apps/checkout/models.py 查看文件


+ 32
- 0
sites/us/apps/checkout/session.py 查看文件

@@ -0,0 +1,32 @@
1
+from decimal import Decimal as D
2
+
3
+from oscar.apps.checkout import session
4
+from apps import tax
5
+
6
+
7
+# Override the session mixin (which every checkout view uses) so we can apply
8
+# takes when the shipping address is known.
9
+class CheckoutSessionMixin(session.CheckoutSessionMixin):
10
+
11
+    def build_submission(self, **kwargs):
12
+        submission = super(CheckoutSessionMixin, self).build_submission(
13
+            **kwargs)
14
+
15
+        if submission['shipping_address']:
16
+            tax.apply_to(submission)
17
+
18
+            # Recalculate order total to ensure we have a tax-inclusive total
19
+            submission['order_total'] = self.get_order_totals(
20
+                submission['basket'],
21
+                shipping_method=submission['shipping_method'])
22
+
23
+        return submission
24
+
25
+    def get_context_data(self, **kwargs):
26
+        ctx = super(CheckoutSessionMixin, self).get_context_data(**kwargs)
27
+
28
+        # Oscar's checkout templates look for this variable which specifies to
29
+        # break out the tax totals into a separate subtotal.
30
+        ctx['show_tax_separately'] = True
31
+
32
+        return ctx

+ 1
- 0
sites/us/apps/checkout/views.py 查看文件

@@ -0,0 +1 @@
1
+

+ 0
- 0
sites/us/apps/partner/__init__.py 查看文件


+ 226
- 0
sites/us/apps/partner/migrations/0001_initial.py 查看文件

@@ -0,0 +1,226 @@
1
+# encoding: utf-8
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+class Migration(SchemaMigration):
9
+
10
+    depends_on = (
11
+        ('catalogue', '0001_initial'),
12
+    )
13
+
14
+    def forwards(self, orm):
15
+        
16
+        # Adding model 'Partner'
17
+        db.create_table('partner_partner', (
18
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
19
+            ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=128)),
20
+        ))
21
+        db.send_create_signal('partner', ['Partner'])
22
+
23
+        # Adding M2M table for field users on 'Partner'
24
+        db.create_table('partner_partner_users', (
25
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
26
+            ('partner', models.ForeignKey(orm['partner.partner'], null=False)),
27
+            ('user', models.ForeignKey(orm[AUTH_USER_MODEL], null=False))
28
+        ))
29
+        db.create_unique('partner_partner_users', ['partner_id', 'user_id'])
30
+
31
+        # Adding model 'StockRecord'
32
+        db.create_table('partner_stockrecord', (
33
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
34
+            ('product', self.gf('django.db.models.fields.related.OneToOneField')(related_name='stockrecord', unique=True, to=orm['catalogue.Product'])),
35
+            ('partner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['partner.Partner'])),
36
+            ('partner_sku', self.gf('django.db.models.fields.CharField')(max_length=128, blank=True)),
37
+            ('price_currency', self.gf('django.db.models.fields.CharField')(default='GBP', max_length=12)),
38
+            ('price_excl_tax', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=12, decimal_places=2, blank=True)),
39
+            ('price_retail', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=12, decimal_places=2, blank=True)),
40
+            ('cost_price', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=12, decimal_places=2, blank=True)),
41
+            ('num_in_stock', self.gf('django.db.models.fields.IntegerField')(default=0, null=True, blank=True)),
42
+            ('num_allocated', self.gf('django.db.models.fields.IntegerField')(default=0, null=True, blank=True)),
43
+            ('date_created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
44
+            ('date_updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, db_index=True, blank=True)),
45
+        ))
46
+        db.send_create_signal('partner', ['StockRecord'])
47
+
48
+
49
+    def backwards(self, orm):
50
+        
51
+        # Deleting model 'Partner'
52
+        db.delete_table('partner_partner')
53
+
54
+        # Removing M2M table for field users on 'Partner'
55
+        db.delete_table('partner_partner_users')
56
+
57
+        # Deleting model 'StockRecord'
58
+        db.delete_table('partner_stockrecord')
59
+
60
+
61
+    models = {
62
+        'auth.group': {
63
+            'Meta': {'object_name': 'Group'},
64
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
65
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
66
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
67
+        },
68
+        'auth.permission': {
69
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
70
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
71
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
72
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
73
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
74
+        },
75
+        AUTH_USER_MODEL: {
76
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
77
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
78
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
79
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
80
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
81
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
83
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
84
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
85
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
86
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
87
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
88
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
89
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
90
+        },
91
+        'catalogue.attributeentity': {
92
+            'Meta': {'object_name': 'AttributeEntity'},
93
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
94
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
95
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
96
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
97
+        },
98
+        'catalogue.attributeentitytype': {
99
+            'Meta': {'object_name': 'AttributeEntityType'},
100
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
101
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
102
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'})
103
+        },
104
+        'catalogue.attributeoption': {
105
+            'Meta': {'object_name': 'AttributeOption'},
106
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
107
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
108
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
109
+        },
110
+        'catalogue.attributeoptiongroup': {
111
+            'Meta': {'object_name': 'AttributeOptionGroup'},
112
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
113
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
114
+        },
115
+        'catalogue.category': {
116
+            'Meta': {'ordering': "['name']", 'object_name': 'Category'},
117
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
118
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
119
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
120
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
121
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
122
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
123
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '1024', 'db_index': 'True'})
124
+        },
125
+        'catalogue.option': {
126
+            'Meta': {'object_name': 'Option'},
127
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
128
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
130
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
131
+        },
132
+        'catalogue.product': {
133
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
134
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
135
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
136
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
137
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
138
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
139
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
140
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
141
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
142
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
143
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
144
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
145
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
146
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
147
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
148
+            'upc': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'null': 'True', 'blank': 'True'})
149
+        },
150
+        'catalogue.productattribute': {
151
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
152
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
153
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
154
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
155
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
156
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
157
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
158
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
159
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
160
+        },
161
+        'catalogue.productattributevalue': {
162
+            'Meta': {'object_name': 'ProductAttributeValue'},
163
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
164
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
165
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"}),
166
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
167
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
168
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
169
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
170
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
171
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
172
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
173
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
174
+        },
175
+        'catalogue.productcategory': {
176
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
177
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
178
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
179
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
180
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
181
+        },
182
+        'catalogue.productclass': {
183
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
184
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
185
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
186
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
187
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'})
188
+        },
189
+        'catalogue.productrecommendation': {
190
+            'Meta': {'object_name': 'ProductRecommendation'},
191
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
192
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
193
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
194
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
195
+        },
196
+        'contenttypes.contenttype': {
197
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
198
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
199
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
200
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
201
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
202
+        },
203
+        'partner.partner': {
204
+            'Meta': {'object_name': 'Partner'},
205
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
206
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
207
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
208
+        },
209
+        'partner.stockrecord': {
210
+            'Meta': {'object_name': 'StockRecord'},
211
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
212
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
213
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
214
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
215
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
216
+            'num_in_stock': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
217
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
218
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
219
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
220
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
221
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
222
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
223
+        }
224
+    }
225
+
226
+    complete_apps = ['partner']

+ 233
- 0
sites/us/apps/partner/migrations/0002_auto__add_stockalert__add_abstractstockalert__add_field_stockrecord_lo.py 查看文件

@@ -0,0 +1,233 @@
1
+# encoding: utf-8
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+class Migration(SchemaMigration):
9
+
10
+    def forwards(self, orm):
11
+
12
+        # Adding model 'StockAlert'
13
+        db.create_table('partner_stockalert', (
14
+            ('abstractstockalert_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['partner.AbstractStockAlert'], unique=True, primary_key=True)),
15
+        ))
16
+        db.send_create_signal('partner', ['StockAlert'])
17
+
18
+        # Adding model 'AbstractStockAlert'
19
+        db.create_table('partner_abstractstockalert', (
20
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
21
+            ('stockrecord', self.gf('django.db.models.fields.related.ForeignKey')(related_name='alerts', to=orm['partner.StockRecord'])),
22
+            ('threshold', self.gf('django.db.models.fields.PositiveIntegerField')()),
23
+            ('status', self.gf('django.db.models.fields.CharField')(default='Open', max_length=128)),
24
+            ('date_created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
25
+            ('date_closed', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
26
+        ))
27
+        db.send_create_signal('partner', ['AbstractStockAlert'])
28
+
29
+        # Adding field 'StockRecord.low_stock_threshold'
30
+        db.add_column('partner_stockrecord', 'low_stock_threshold', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True), keep_default=False)
31
+
32
+        # Changing field 'StockRecord.num_in_stock'
33
+        db.alter_column('partner_stockrecord', 'num_in_stock', self.gf('django.db.models.fields.PositiveIntegerField')(null=True))
34
+
35
+
36
+    def backwards(self, orm):
37
+
38
+        # Deleting model 'StockAlert'
39
+        db.delete_table('partner_stockalert')
40
+
41
+        # Deleting model 'AbstractStockAlert'
42
+        db.delete_table('partner_abstractstockalert')
43
+
44
+        # Deleting field 'StockRecord.low_stock_threshold'
45
+        db.delete_column('partner_stockrecord', 'low_stock_threshold')
46
+
47
+        # Changing field 'StockRecord.num_in_stock'
48
+        db.alter_column('partner_stockrecord', 'num_in_stock', self.gf('django.db.models.fields.IntegerField')(null=True))
49
+
50
+
51
+    models = {
52
+        'auth.group': {
53
+            'Meta': {'object_name': 'Group'},
54
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
56
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
57
+        },
58
+        'auth.permission': {
59
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
60
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
61
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
62
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
64
+        },
65
+        AUTH_USER_MODEL: {
66
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
67
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
68
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
69
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
70
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
71
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
72
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
73
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
74
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
75
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
76
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
77
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
78
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
79
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
80
+        },
81
+        'catalogue.attributeentity': {
82
+            'Meta': {'object_name': 'AttributeEntity'},
83
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
85
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
86
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
87
+        },
88
+        'catalogue.attributeentitytype': {
89
+            'Meta': {'object_name': 'AttributeEntityType'},
90
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
91
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
92
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'})
93
+        },
94
+        'catalogue.attributeoption': {
95
+            'Meta': {'object_name': 'AttributeOption'},
96
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
97
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
98
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
99
+        },
100
+        'catalogue.attributeoptiongroup': {
101
+            'Meta': {'object_name': 'AttributeOptionGroup'},
102
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
103
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
104
+        },
105
+        'catalogue.category': {
106
+            'Meta': {'ordering': "['name']", 'object_name': 'Category'},
107
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
108
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
109
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
110
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
111
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
112
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
113
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
114
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
115
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '1024', 'db_index': 'True'})
116
+        },
117
+        'catalogue.option': {
118
+            'Meta': {'object_name': 'Option'},
119
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
120
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
122
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
123
+        },
124
+        'catalogue.product': {
125
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
126
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
127
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
128
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
129
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
130
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
131
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
132
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
133
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
134
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
135
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
136
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
137
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
138
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
139
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
140
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
141
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
142
+        },
143
+        'catalogue.productattribute': {
144
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
145
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
146
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
147
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
148
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
149
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
150
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
151
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
152
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
153
+        },
154
+        'catalogue.productattributevalue': {
155
+            'Meta': {'object_name': 'ProductAttributeValue'},
156
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
157
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
159
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
160
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
161
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
162
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
163
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
164
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
165
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
166
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
167
+        },
168
+        'catalogue.productcategory': {
169
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
170
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
171
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
173
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
174
+        },
175
+        'catalogue.productclass': {
176
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
177
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
178
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
179
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
180
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'})
181
+        },
182
+        'catalogue.productrecommendation': {
183
+            'Meta': {'object_name': 'ProductRecommendation'},
184
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
185
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
186
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
187
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
188
+        },
189
+        'contenttypes.contenttype': {
190
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
191
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
192
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
193
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
194
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
195
+        },
196
+        'partner.abstractstockalert': {
197
+            'Meta': {'object_name': 'AbstractStockAlert'},
198
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
199
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
200
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
201
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
202
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
203
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
204
+        },
205
+        'partner.partner': {
206
+            'Meta': {'object_name': 'Partner'},
207
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
208
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
209
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
210
+        },
211
+        'partner.stockalert': {
212
+            'Meta': {'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
213
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
214
+        },
215
+        'partner.stockrecord': {
216
+            'Meta': {'object_name': 'StockRecord'},
217
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
218
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
219
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
220
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
221
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
222
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
223
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
224
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
225
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
226
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
227
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
228
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
229
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
230
+        }
231
+    }
232
+
233
+    complete_apps = ['partner']

+ 204
- 0
sites/us/apps/partner/migrations/0003_auto__add_unique_stockrecord_partner_partner_sku.py 查看文件

@@ -0,0 +1,204 @@
1
+# encoding: utf-8
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+class Migration(SchemaMigration):
9
+
10
+    def forwards(self, orm):
11
+
12
+        # Adding unique constraint on 'StockRecord', fields ['partner', 'partner_sku']
13
+        db.create_unique('partner_stockrecord', ['partner_id', 'partner_sku'])
14
+
15
+
16
+    def backwards(self, orm):
17
+
18
+        # Removing unique constraint on 'StockRecord', fields ['partner', 'partner_sku']
19
+        db.delete_unique('partner_stockrecord', ['partner_id', 'partner_sku'])
20
+
21
+
22
+    models = {
23
+        'auth.group': {
24
+            'Meta': {'object_name': 'Group'},
25
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
26
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
27
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
28
+        },
29
+        'auth.permission': {
30
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
31
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
32
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
33
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
34
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
35
+        },
36
+        AUTH_USER_MODEL: {
37
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
38
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
39
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
40
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
41
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
42
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
43
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
44
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
47
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
48
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
49
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
50
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
51
+        },
52
+        'catalogue.attributeentity': {
53
+            'Meta': {'object_name': 'AttributeEntity'},
54
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
56
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}),
57
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
58
+        },
59
+        'catalogue.attributeentitytype': {
60
+            'Meta': {'object_name': 'AttributeEntityType'},
61
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
63
+            'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'})
64
+        },
65
+        'catalogue.attributeoption': {
66
+            'Meta': {'object_name': 'AttributeOption'},
67
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
68
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
69
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
70
+        },
71
+        'catalogue.attributeoptiongroup': {
72
+            'Meta': {'object_name': 'AttributeOptionGroup'},
73
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
74
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
75
+        },
76
+        'catalogue.category': {
77
+            'Meta': {'ordering': "['name']", 'object_name': 'Category'},
78
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
79
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
80
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
81
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
83
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
84
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
85
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
86
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '1024', 'db_index': 'True'})
87
+        },
88
+        'catalogue.option': {
89
+            'Meta': {'object_name': 'Option'},
90
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
91
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
93
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
94
+        },
95
+        'catalogue.product': {
96
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
97
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
98
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
99
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
100
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
101
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
102
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
103
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
104
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
105
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
106
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
107
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
108
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
109
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
110
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
111
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
112
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
113
+        },
114
+        'catalogue.productattribute': {
115
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
116
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128', 'db_index': 'True'}),
117
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
118
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
119
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
120
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
121
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
122
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
123
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
124
+        },
125
+        'catalogue.productattributevalue': {
126
+            'Meta': {'object_name': 'ProductAttributeValue'},
127
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
128
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
130
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
131
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
132
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
133
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
134
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
135
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
136
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
137
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
138
+        },
139
+        'catalogue.productcategory': {
140
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
141
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
142
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
143
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
144
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
145
+        },
146
+        'catalogue.productclass': {
147
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
148
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
149
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
150
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
151
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'})
152
+        },
153
+        'catalogue.productrecommendation': {
154
+            'Meta': {'object_name': 'ProductRecommendation'},
155
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
156
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
157
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
158
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
159
+        },
160
+        'contenttypes.contenttype': {
161
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
162
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
163
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
164
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
165
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
166
+        },
167
+        'partner.abstractstockalert': {
168
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'AbstractStockAlert'},
169
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
170
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
171
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
173
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
174
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
175
+        },
176
+        'partner.partner': {
177
+            'Meta': {'object_name': 'Partner'},
178
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
179
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
180
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
181
+        },
182
+        'partner.stockalert': {
183
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
184
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
185
+        },
186
+        'partner.stockrecord': {
187
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
188
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
189
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
190
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
191
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
192
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
193
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
194
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
195
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
196
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
197
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
198
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
199
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
200
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
201
+        }
202
+    }
203
+
204
+    complete_apps = ['partner']

+ 209
- 0
sites/us/apps/partner/migrations/0004_auto__add_field_partner_code.py 查看文件

@@ -0,0 +1,209 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Adding field 'Partner.code'
13
+        db.add_column('partner_partner', 'code',
14
+                      self.gf('django.db.models.fields.SlugField')(default='', max_length=128),
15
+                      keep_default=False)
16
+
17
+
18
+    def backwards(self, orm):
19
+        # Deleting field 'Partner.code'
20
+        db.delete_column('partner_partner', 'code')
21
+
22
+
23
+    models = {
24
+        'auth.group': {
25
+            'Meta': {'object_name': 'Group'},
26
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
27
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
28
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
29
+        },
30
+        'auth.permission': {
31
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
32
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
33
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
34
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
35
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
36
+        },
37
+        AUTH_USER_MODEL: {
38
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
39
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
40
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
41
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
42
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
43
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
44
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
45
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
47
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
48
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
49
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
50
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
51
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
52
+        },
53
+        'catalogue.attributeentity': {
54
+            'Meta': {'object_name': 'AttributeEntity'},
55
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
56
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
57
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
58
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
59
+        },
60
+        'catalogue.attributeentitytype': {
61
+            'Meta': {'object_name': 'AttributeEntityType'},
62
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
63
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
64
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
65
+        },
66
+        'catalogue.attributeoption': {
67
+            'Meta': {'object_name': 'AttributeOption'},
68
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
69
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
70
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
71
+        },
72
+        'catalogue.attributeoptiongroup': {
73
+            'Meta': {'object_name': 'AttributeOptionGroup'},
74
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
76
+        },
77
+        'catalogue.category': {
78
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
79
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
80
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
81
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
82
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
83
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
84
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
85
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
86
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
87
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
88
+        },
89
+        'catalogue.option': {
90
+            'Meta': {'object_name': 'Option'},
91
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
92
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
93
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
94
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
95
+        },
96
+        'catalogue.product': {
97
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
98
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
99
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
100
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
101
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
102
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
103
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
104
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
105
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
106
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
107
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
108
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
109
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
110
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
111
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
112
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
113
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
114
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
115
+        },
116
+        'catalogue.productattribute': {
117
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
118
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
119
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
120
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
122
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
123
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
124
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
125
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
126
+        },
127
+        'catalogue.productattributevalue': {
128
+            'Meta': {'object_name': 'ProductAttributeValue'},
129
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
130
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
131
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
132
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
133
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
134
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
135
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
136
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
137
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
138
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
139
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
140
+        },
141
+        'catalogue.productcategory': {
142
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
143
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
144
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
145
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
146
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
147
+        },
148
+        'catalogue.productclass': {
149
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
150
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
151
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
152
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
153
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
154
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
155
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
156
+        },
157
+        'catalogue.productrecommendation': {
158
+            'Meta': {'object_name': 'ProductRecommendation'},
159
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
160
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
161
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
162
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
163
+        },
164
+        'contenttypes.contenttype': {
165
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
166
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
167
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
168
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
169
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
170
+        },
171
+        'partner.abstractstockalert': {
172
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'AbstractStockAlert'},
173
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
174
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
175
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
176
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
177
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
178
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
179
+        },
180
+        'partner.partner': {
181
+            'Meta': {'object_name': 'Partner'},
182
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
183
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
184
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
185
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
186
+        },
187
+        'partner.stockalert': {
188
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
189
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
190
+        },
191
+        'partner.stockrecord': {
192
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
193
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
194
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
195
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
196
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
197
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
198
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
199
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
200
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
201
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
202
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
203
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
204
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
205
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
206
+        }
207
+    }
208
+
209
+    complete_apps = ['partner']

+ 209
- 0
sites/us/apps/partner/migrations/0005_populate_slugs.py 查看文件

@@ -0,0 +1,209 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import DataMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+from oscar.core.utils import slugify
8
+
9
+class Migration(DataMigration):
10
+
11
+    def forwards(self, orm):
12
+        "Write your forwards methods here."
13
+        # Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
14
+        Partner = orm['partner.Partner']
15
+        for partner in Partner.objects.all():
16
+            partner.code = slugify(partner.name)
17
+            partner.save()
18
+
19
+    def backwards(self, orm):
20
+        "Write your backwards methods here."
21
+
22
+    models = {
23
+        'auth.group': {
24
+            'Meta': {'object_name': 'Group'},
25
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
26
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
27
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
28
+        },
29
+        'auth.permission': {
30
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
31
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
32
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
33
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
34
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
35
+        },
36
+        AUTH_USER_MODEL: {
37
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
38
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
39
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
40
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
41
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
42
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
43
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
44
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
47
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
48
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
49
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
50
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
51
+        },
52
+        'catalogue.attributeentity': {
53
+            'Meta': {'object_name': 'AttributeEntity'},
54
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
55
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
56
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
57
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
58
+        },
59
+        'catalogue.attributeentitytype': {
60
+            'Meta': {'object_name': 'AttributeEntityType'},
61
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
63
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
64
+        },
65
+        'catalogue.attributeoption': {
66
+            'Meta': {'object_name': 'AttributeOption'},
67
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
68
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
69
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
70
+        },
71
+        'catalogue.attributeoptiongroup': {
72
+            'Meta': {'object_name': 'AttributeOptionGroup'},
73
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
74
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
75
+        },
76
+        'catalogue.category': {
77
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
78
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
79
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
80
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
81
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
83
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
84
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
85
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
86
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
87
+        },
88
+        'catalogue.option': {
89
+            'Meta': {'object_name': 'Option'},
90
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
91
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
93
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
94
+        },
95
+        'catalogue.product': {
96
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
97
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
98
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
99
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
100
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
101
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
102
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
103
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
104
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
105
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
106
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
107
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
108
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
109
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
110
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
111
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
112
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
113
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
114
+        },
115
+        'catalogue.productattribute': {
116
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
117
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
118
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
119
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
120
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
121
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
122
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
123
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
124
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
125
+        },
126
+        'catalogue.productattributevalue': {
127
+            'Meta': {'object_name': 'ProductAttributeValue'},
128
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
129
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
130
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
131
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
132
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
133
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
134
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
135
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
136
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
137
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
138
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
139
+        },
140
+        'catalogue.productcategory': {
141
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
142
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
143
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
144
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
145
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
146
+        },
147
+        'catalogue.productclass': {
148
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
149
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
150
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
151
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
152
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
153
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
154
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
155
+        },
156
+        'catalogue.productrecommendation': {
157
+            'Meta': {'object_name': 'ProductRecommendation'},
158
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
159
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
160
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
161
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
162
+        },
163
+        'contenttypes.contenttype': {
164
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
165
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
166
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
167
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
168
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
169
+        },
170
+        'partner.abstractstockalert': {
171
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'AbstractStockAlert'},
172
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
173
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
174
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
175
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
176
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
177
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
178
+        },
179
+        'partner.partner': {
180
+            'Meta': {'object_name': 'Partner'},
181
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
182
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
183
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
184
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
185
+        },
186
+        'partner.stockalert': {
187
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
188
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
189
+        },
190
+        'partner.stockrecord': {
191
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
192
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
193
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
194
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
195
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
196
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
197
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
198
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
199
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
200
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
201
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
202
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
203
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
204
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
205
+        }
206
+    }
207
+
208
+    complete_apps = ['partner']
209
+    symmetrical = True

+ 207
- 0
sites/us/apps/partner/migrations/0006_auto__add_unique_partner_code.py 查看文件

@@ -0,0 +1,207 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Adding unique constraint on 'Partner', fields ['code']
13
+        db.create_unique('partner_partner', ['code'])
14
+
15
+
16
+    def backwards(self, orm):
17
+        # Removing unique constraint on 'Partner', fields ['code']
18
+        db.delete_unique('partner_partner', ['code'])
19
+
20
+
21
+    models = {
22
+        'auth.group': {
23
+            'Meta': {'object_name': 'Group'},
24
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
25
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
26
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
27
+        },
28
+        'auth.permission': {
29
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
30
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
31
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
32
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
33
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
34
+        },
35
+        AUTH_USER_MODEL: {
36
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
37
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
38
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
39
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
40
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
41
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
42
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
43
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
46
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
47
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
48
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
49
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
50
+        },
51
+        'catalogue.attributeentity': {
52
+            'Meta': {'object_name': 'AttributeEntity'},
53
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
54
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
55
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
56
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
57
+        },
58
+        'catalogue.attributeentitytype': {
59
+            'Meta': {'object_name': 'AttributeEntityType'},
60
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
61
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
62
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
63
+        },
64
+        'catalogue.attributeoption': {
65
+            'Meta': {'object_name': 'AttributeOption'},
66
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
67
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
68
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
69
+        },
70
+        'catalogue.attributeoptiongroup': {
71
+            'Meta': {'object_name': 'AttributeOptionGroup'},
72
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
73
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
74
+        },
75
+        'catalogue.category': {
76
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
77
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
78
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
79
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
80
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
81
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
82
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
83
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
84
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
85
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
86
+        },
87
+        'catalogue.option': {
88
+            'Meta': {'object_name': 'Option'},
89
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
90
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
91
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
92
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
93
+        },
94
+        'catalogue.product': {
95
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
96
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
97
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
98
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
99
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
100
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
101
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
102
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
103
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
104
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
105
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
106
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
107
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
108
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
109
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
110
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
111
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
112
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
113
+        },
114
+        'catalogue.productattribute': {
115
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
116
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
117
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
118
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
119
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
120
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
121
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
122
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
123
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
124
+        },
125
+        'catalogue.productattributevalue': {
126
+            'Meta': {'object_name': 'ProductAttributeValue'},
127
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
128
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
129
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
130
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
131
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
132
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
133
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
134
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
135
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
136
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
137
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
138
+        },
139
+        'catalogue.productcategory': {
140
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
141
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
142
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
143
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
144
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
145
+        },
146
+        'catalogue.productclass': {
147
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
148
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
149
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
150
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
151
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
152
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
153
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
154
+        },
155
+        'catalogue.productrecommendation': {
156
+            'Meta': {'object_name': 'ProductRecommendation'},
157
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
159
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
160
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
161
+        },
162
+        'contenttypes.contenttype': {
163
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
164
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
165
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
166
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
167
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
168
+        },
169
+        'partner.abstractstockalert': {
170
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'AbstractStockAlert'},
171
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
172
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
173
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
174
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
175
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
176
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
177
+        },
178
+        'partner.partner': {
179
+            'Meta': {'object_name': 'Partner'},
180
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
181
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
182
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}),
183
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
184
+        },
185
+        'partner.stockalert': {
186
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
187
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
188
+        },
189
+        'partner.stockrecord': {
190
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
191
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
192
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
193
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
194
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
195
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
196
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
197
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
198
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
199
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
200
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
201
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
202
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
203
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
204
+        }
205
+    }
206
+
207
+    complete_apps = ['partner']

+ 213
- 0
sites/us/apps/partner/migrations/0007_auto__chg_field_partner_name__del_unique_partner_name.py 查看文件

@@ -0,0 +1,213 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Removing unique constraint on 'Partner', fields ['name']
13
+        db.delete_unique('partner_partner', ['name'])
14
+
15
+
16
+        # Changing field 'Partner.name'
17
+        db.alter_column('partner_partner', 'name', self.gf('django.db.models.fields.CharField')(max_length=128, null=True))
18
+
19
+    def backwards(self, orm):
20
+
21
+        # Changing field 'Partner.name'
22
+        db.alter_column('partner_partner', 'name', self.gf('django.db.models.fields.CharField')(default='', max_length=128, unique=True))
23
+        # Adding unique constraint on 'Partner', fields ['name']
24
+        db.create_unique('partner_partner', ['name'])
25
+
26
+
27
+    models = {
28
+        'auth.group': {
29
+            'Meta': {'object_name': 'Group'},
30
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
31
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
32
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
33
+        },
34
+        'auth.permission': {
35
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
36
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
37
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
38
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
39
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
40
+        },
41
+        AUTH_USER_MODEL: {
42
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
43
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
44
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
45
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
46
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
47
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
48
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
49
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
50
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
51
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
52
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
53
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
54
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
55
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
56
+        },
57
+        'catalogue.attributeentity': {
58
+            'Meta': {'object_name': 'AttributeEntity'},
59
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
60
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
61
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
62
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
63
+        },
64
+        'catalogue.attributeentitytype': {
65
+            'Meta': {'object_name': 'AttributeEntityType'},
66
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
67
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
68
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
69
+        },
70
+        'catalogue.attributeoption': {
71
+            'Meta': {'object_name': 'AttributeOption'},
72
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
73
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
74
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
75
+        },
76
+        'catalogue.attributeoptiongroup': {
77
+            'Meta': {'object_name': 'AttributeOptionGroup'},
78
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
80
+        },
81
+        'catalogue.category': {
82
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
83
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
84
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
85
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
86
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
87
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
88
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
89
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
90
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
91
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
92
+        },
93
+        'catalogue.option': {
94
+            'Meta': {'object_name': 'Option'},
95
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
96
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
97
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
98
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
99
+        },
100
+        'catalogue.product': {
101
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
102
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
103
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
104
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
105
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
106
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
107
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
108
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
109
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
110
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
111
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
112
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
113
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
114
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
115
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
116
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
117
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
118
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
119
+        },
120
+        'catalogue.productattribute': {
121
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
122
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
123
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
124
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
125
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
126
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
127
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
128
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
129
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
130
+        },
131
+        'catalogue.productattributevalue': {
132
+            'Meta': {'object_name': 'ProductAttributeValue'},
133
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
134
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
135
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
136
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
137
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
138
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
139
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
140
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
141
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
142
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
143
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
144
+        },
145
+        'catalogue.productcategory': {
146
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
147
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
148
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
149
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
150
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
151
+        },
152
+        'catalogue.productclass': {
153
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
154
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
155
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
156
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
157
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
158
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
159
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
160
+        },
161
+        'catalogue.productrecommendation': {
162
+            'Meta': {'object_name': 'ProductRecommendation'},
163
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
164
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
165
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
166
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
167
+        },
168
+        'contenttypes.contenttype': {
169
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
170
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
171
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
173
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
174
+        },
175
+        'partner.abstractstockalert': {
176
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'AbstractStockAlert'},
177
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
178
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
179
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
180
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
181
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
182
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
183
+        },
184
+        'partner.partner': {
185
+            'Meta': {'object_name': 'Partner'},
186
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
187
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
188
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
189
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
190
+        },
191
+        'partner.stockalert': {
192
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert', '_ormbases': ['partner.AbstractStockAlert']},
193
+            'abstractstockalert_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['partner.AbstractStockAlert']", 'unique': 'True', 'primary_key': 'True'})
194
+        },
195
+        'partner.stockrecord': {
196
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
197
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
198
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
199
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
200
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
201
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
202
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
203
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
204
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
205
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
206
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
207
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
208
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
209
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
210
+        }
211
+    }
212
+
213
+    complete_apps = ['partner']

+ 202
- 0
sites/us/apps/partner/migrations/0008_auto__del_abstractstockalert__del_field_stockalert_abstractstockalert_.py 查看文件

@@ -0,0 +1,202 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Deleting model 'AbstractStockAlert'
13
+        db.drop_table('partner_stockalert')
14
+        db.rename_table('partner_abstractstockalert', 'partner_stockalert')
15
+
16
+    def backwards(self, orm):
17
+        raise Exception("This migration cannot be reversed")
18
+
19
+    models = {
20
+        'auth.group': {
21
+            'Meta': {'object_name': 'Group'},
22
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
23
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
24
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
25
+        },
26
+        'auth.permission': {
27
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
28
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
29
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
30
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
31
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
32
+        },
33
+        AUTH_USER_MODEL: {
34
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
35
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
36
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
37
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
38
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
39
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
40
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
41
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
42
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
43
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
44
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
45
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
46
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
47
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
48
+        },
49
+        'catalogue.attributeentity': {
50
+            'Meta': {'object_name': 'AttributeEntity'},
51
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
52
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
53
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
54
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
55
+        },
56
+        'catalogue.attributeentitytype': {
57
+            'Meta': {'object_name': 'AttributeEntityType'},
58
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
59
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
60
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
61
+        },
62
+        'catalogue.attributeoption': {
63
+            'Meta': {'object_name': 'AttributeOption'},
64
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
65
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
66
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
67
+        },
68
+        'catalogue.attributeoptiongroup': {
69
+            'Meta': {'object_name': 'AttributeOptionGroup'},
70
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
71
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
72
+        },
73
+        'catalogue.category': {
74
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
75
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
76
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
77
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
78
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
80
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
81
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
82
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
83
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
84
+        },
85
+        'catalogue.option': {
86
+            'Meta': {'object_name': 'Option'},
87
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
88
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
89
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
90
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
91
+        },
92
+        'catalogue.product': {
93
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
94
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
95
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
96
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
97
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
98
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
99
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
100
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
101
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
102
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductClass']", 'null': 'True'}),
103
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
104
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
105
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
106
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
107
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
108
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
109
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
110
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
111
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
112
+        },
113
+        'catalogue.productattribute': {
114
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
115
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
116
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
117
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
118
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
119
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
120
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
121
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
122
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
123
+        },
124
+        'catalogue.productattributevalue': {
125
+            'Meta': {'object_name': 'ProductAttributeValue'},
126
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
127
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
128
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
129
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
130
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
131
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
132
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
133
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
134
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
135
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
136
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
137
+        },
138
+        'catalogue.productcategory': {
139
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
140
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
141
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
142
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
143
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
144
+        },
145
+        'catalogue.productclass': {
146
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
147
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
148
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
149
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
150
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
151
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
152
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
153
+        },
154
+        'catalogue.productrecommendation': {
155
+            'Meta': {'object_name': 'ProductRecommendation'},
156
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
157
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
158
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
159
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
160
+        },
161
+        'contenttypes.contenttype': {
162
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
163
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
164
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
165
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
166
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
167
+        },
168
+        'partner.partner': {
169
+            'Meta': {'object_name': 'Partner'},
170
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
171
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
173
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
174
+        },
175
+        'partner.stockalert': {
176
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
177
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
178
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
179
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
180
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
181
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
182
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
183
+        },
184
+        'partner.stockrecord': {
185
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
186
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
187
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
188
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
189
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
190
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
191
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
192
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
193
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['partner.Partner']"}),
194
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
195
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
196
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
197
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
198
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': "orm['catalogue.Product']"})
199
+        }
200
+    }
201
+
202
+    complete_apps = ['partner']

+ 245
- 0
sites/us/apps/partner/migrations/0009_auto__add_partneraddress.py 查看文件

@@ -0,0 +1,245 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Adding model 'PartnerAddress'
13
+        db.create_table(u'partner_partneraddress', (
14
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
15
+            ('title', self.gf('django.db.models.fields.CharField')(max_length=64, null=True, blank=True)),
16
+            ('first_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
17
+            ('last_name', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
18
+            ('line1', self.gf('django.db.models.fields.CharField')(max_length=255)),
19
+            ('line2', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
20
+            ('line3', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
21
+            ('line4', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
22
+            ('state', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
23
+            ('postcode', self.gf('oscar.models.fields.UppercaseCharField')(max_length=64, null=True, blank=True)),
24
+            ('country', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['address.Country'])),
25
+            ('search_text', self.gf('django.db.models.fields.CharField')(max_length=1000)),
26
+            ('partner', self.gf('django.db.models.fields.related.ForeignKey')(related_name='addresses', to=orm['partner.Partner'])),
27
+        ))
28
+        db.send_create_signal(u'partner', ['PartnerAddress'])
29
+
30
+
31
+    def backwards(self, orm):
32
+        # Deleting model 'PartnerAddress'
33
+        db.delete_table(u'partner_partneraddress')
34
+
35
+
36
+    models = {
37
+        u'address.country': {
38
+            'Meta': {'ordering': "('-display_order', 'name')", 'object_name': 'Country'},
39
+            'display_order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
40
+            'is_shipping_country': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
41
+            'iso_3166_1_a2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
42
+            'iso_3166_1_a3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'db_index': 'True'}),
43
+            'iso_3166_1_numeric': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'db_index': 'True'}),
44
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
45
+            'printable_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
46
+        },
47
+        u'auth.group': {
48
+            'Meta': {'object_name': 'Group'},
49
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
50
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
51
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
52
+        },
53
+        u'auth.permission': {
54
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
55
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
56
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
57
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
58
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
59
+        },
60
+        AUTH_USER_MODEL: {
61
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
62
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
63
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
64
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
65
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
66
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
67
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
68
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
69
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
70
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
71
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
72
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
73
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
74
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
75
+        },
76
+        u'catalogue.attributeentity': {
77
+            'Meta': {'object_name': 'AttributeEntity'},
78
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
80
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
81
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': u"orm['catalogue.AttributeEntityType']"})
82
+        },
83
+        u'catalogue.attributeentitytype': {
84
+            'Meta': {'object_name': 'AttributeEntityType'},
85
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
86
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
87
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
88
+        },
89
+        u'catalogue.attributeoption': {
90
+            'Meta': {'object_name': 'AttributeOption'},
91
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': u"orm['catalogue.AttributeOptionGroup']"}),
92
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
93
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
94
+        },
95
+        u'catalogue.attributeoptiongroup': {
96
+            'Meta': {'object_name': 'AttributeOptionGroup'},
97
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
98
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
99
+        },
100
+        u'catalogue.category': {
101
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
102
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
103
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
104
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
105
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
106
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
107
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
108
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
109
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
110
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
111
+        },
112
+        u'catalogue.option': {
113
+            'Meta': {'object_name': 'Option'},
114
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
115
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
116
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
117
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
118
+        },
119
+        u'catalogue.product': {
120
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
121
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.ProductAttribute']", 'through': u"orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
122
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Category']", 'through': u"orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
123
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
124
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
125
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
126
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
127
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
128
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': u"orm['catalogue.Product']"}),
129
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.ProductClass']", 'null': 'True'}),
130
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
131
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
132
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Product']", 'symmetrical': 'False', 'through': u"orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
133
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': u"orm['catalogue.Product']"}),
134
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
135
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
136
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
137
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
138
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
139
+        },
140
+        u'catalogue.productattribute': {
141
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
142
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
143
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
144
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
145
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
146
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
147
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': u"orm['catalogue.ProductClass']"}),
148
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
149
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
150
+        },
151
+        u'catalogue.productattributevalue': {
152
+            'Meta': {'object_name': 'ProductAttributeValue'},
153
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.ProductAttribute']"}),
154
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
155
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': u"orm['catalogue.Product']"}),
156
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
157
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
158
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
159
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
160
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
161
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
162
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
163
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
164
+        },
165
+        u'catalogue.productcategory': {
166
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
167
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Category']"}),
168
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
169
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
170
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
171
+        },
172
+        u'catalogue.productclass': {
173
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
174
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
175
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
176
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
177
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
178
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
179
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
180
+        },
181
+        u'catalogue.productrecommendation': {
182
+            'Meta': {'object_name': 'ProductRecommendation'},
183
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
184
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': u"orm['catalogue.Product']"}),
185
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
186
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
187
+        },
188
+        u'contenttypes.contenttype': {
189
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
190
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
191
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
192
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
193
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
194
+        },
195
+        u'partner.partner': {
196
+            'Meta': {'object_name': 'Partner'},
197
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
198
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
199
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
200
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['{0}']".format(AUTH_USER_MODEL)})
201
+        },
202
+        u'partner.partneraddress': {
203
+            'Meta': {'object_name': 'PartnerAddress'},
204
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['address.Country']"}),
205
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
206
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
207
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
208
+            'line1': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
209
+            'line2': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
210
+            'line3': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
211
+            'line4': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
212
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'addresses'", 'to': u"orm['partner.Partner']"}),
213
+            'postcode': ('oscar.models.fields.UppercaseCharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
214
+            'search_text': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
215
+            'state': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
216
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'})
217
+        },
218
+        u'partner.stockalert': {
219
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
220
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
221
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
222
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
223
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
224
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': u"orm['partner.StockRecord']"}),
225
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
226
+        },
227
+        u'partner.stockrecord': {
228
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
229
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
230
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
231
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
232
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
233
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
234
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
235
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
236
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['partner.Partner']"}),
237
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
238
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
239
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
240
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
241
+            'product': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stockrecord'", 'unique': 'True', 'to': u"orm['catalogue.Product']"})
242
+        }
243
+    }
244
+
245
+    complete_apps = ['partner']

+ 236
- 0
sites/us/apps/partner/migrations/0010_auto__chg_field_stockrecord_product__del_unique_stockrecord_product.py 查看文件

@@ -0,0 +1,236 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
7
+
8
+
9
+class Migration(SchemaMigration):
10
+
11
+    def forwards(self, orm):
12
+        # Removing unique constraint on 'StockRecord', fields ['product']
13
+        db.delete_unique('partner_stockrecord', ['product_id'])
14
+
15
+
16
+        # Changing field 'StockRecord.product'
17
+        db.alter_column('partner_stockrecord', 'product_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['catalogue.Product']))
18
+
19
+    def backwards(self, orm):
20
+
21
+        # Changing field 'StockRecord.product'
22
+        db.alter_column('partner_stockrecord', 'product_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, to=orm['catalogue.Product']))
23
+        # Adding unique constraint on 'StockRecord', fields ['product']
24
+        db.create_unique('partner_stockrecord', ['product_id'])
25
+
26
+
27
+    models = {
28
+        'address.country': {
29
+            'Meta': {'ordering': "('-display_order', 'name')", 'object_name': 'Country'},
30
+            'display_order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
31
+            'is_shipping_country': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
32
+            'iso_3166_1_a2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
33
+            'iso_3166_1_a3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'db_index': 'True'}),
34
+            'iso_3166_1_numeric': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'db_index': 'True'}),
35
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
36
+            'printable_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
37
+        },
38
+        'auth.group': {
39
+            'Meta': {'object_name': 'Group'},
40
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
41
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
42
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
43
+        },
44
+        'auth.permission': {
45
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
46
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
47
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
48
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
49
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
50
+        },
51
+        AUTH_USER_MODEL: {
52
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
53
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
54
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
55
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
56
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
57
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
58
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
59
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
60
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
61
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
62
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
63
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
64
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
65
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
66
+        },
67
+        'catalogue.attributeentity': {
68
+            'Meta': {'object_name': 'AttributeEntity'},
69
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
70
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
71
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
72
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': "orm['catalogue.AttributeEntityType']"})
73
+        },
74
+        'catalogue.attributeentitytype': {
75
+            'Meta': {'object_name': 'AttributeEntityType'},
76
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
77
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
78
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
79
+        },
80
+        'catalogue.attributeoption': {
81
+            'Meta': {'object_name': 'AttributeOption'},
82
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': "orm['catalogue.AttributeOptionGroup']"}),
83
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
85
+        },
86
+        'catalogue.attributeoptiongroup': {
87
+            'Meta': {'object_name': 'AttributeOptionGroup'},
88
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
89
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
90
+        },
91
+        'catalogue.category': {
92
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
93
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
94
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
95
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
96
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
97
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
98
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
99
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
100
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
101
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
102
+        },
103
+        'catalogue.option': {
104
+            'Meta': {'object_name': 'Option'},
105
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
106
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
107
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
108
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
109
+        },
110
+        'catalogue.product': {
111
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
112
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.ProductAttribute']", 'through': "orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
113
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Category']", 'through': "orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
114
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
115
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
116
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
117
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
118
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
119
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': "orm['catalogue.Product']"}),
120
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'products'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
121
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
122
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
123
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Product']", 'symmetrical': 'False', 'through': "orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
124
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': "orm['catalogue.Product']"}),
125
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
126
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
127
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
128
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
129
+            'upc': ('django.db.models.fields.CharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
130
+        },
131
+        'catalogue.productattribute': {
132
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
133
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
134
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
135
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
136
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
137
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
138
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': "orm['catalogue.ProductClass']"}),
139
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
140
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
141
+        },
142
+        'catalogue.productattributevalue': {
143
+            'Meta': {'object_name': 'ProductAttributeValue'},
144
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.ProductAttribute']"}),
145
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
146
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': "orm['catalogue.Product']"}),
147
+            'value_boolean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
148
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
149
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
150
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
151
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
152
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
153
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
154
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
155
+        },
156
+        'catalogue.productcategory': {
157
+            'Meta': {'ordering': "['-is_canonical']", 'object_name': 'ProductCategory'},
158
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Category']"}),
159
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
160
+            'is_canonical': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
161
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
162
+        },
163
+        'catalogue.productclass': {
164
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
165
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
166
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
167
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
168
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
169
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
170
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
171
+        },
172
+        'catalogue.productrecommendation': {
173
+            'Meta': {'object_name': 'ProductRecommendation'},
174
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
175
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': "orm['catalogue.Product']"}),
176
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
177
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Product']"})
178
+        },
179
+        'contenttypes.contenttype': {
180
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
181
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
182
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
183
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
184
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
185
+        },
186
+        'partner.partner': {
187
+            'Meta': {'object_name': 'Partner'},
188
+            'code': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '128'}),
189
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
190
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
191
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['{0}']".format(AUTH_USER_MODEL)})
192
+        },
193
+        'partner.partneraddress': {
194
+            'Meta': {'object_name': 'PartnerAddress'},
195
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['address.Country']"}),
196
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
197
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
199
+            'line1': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
200
+            'line2': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
201
+            'line3': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
202
+            'line4': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
203
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'addresses'", 'to': "orm['partner.Partner']"}),
204
+            'postcode': ('oscar.models.fields.UppercaseCharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
205
+            'search_text': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
206
+            'state': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
207
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'})
208
+        },
209
+        'partner.stockalert': {
210
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
211
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
212
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
213
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
214
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
215
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': "orm['partner.StockRecord']"}),
216
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
217
+        },
218
+        'partner.stockrecord': {
219
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
220
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
221
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
222
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
223
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
224
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
225
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
226
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
227
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': "orm['partner.Partner']"}),
228
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
229
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
230
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
231
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
232
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': "orm['catalogue.Product']"})
233
+        }
234
+    }
235
+
236
+    complete_apps = ['partner']

+ 232
- 0
sites/us/apps/partner/migrations/0011_auto__chg_field_partner_code.py 查看文件

@@ -0,0 +1,232 @@
1
+# -*- coding: utf-8 -*-
2
+from south.utils import datetime_utils as datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+
7
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
8
+
9
+
10
+class Migration(SchemaMigration):
11
+
12
+    def forwards(self, orm):
13
+
14
+        # Changing field 'Partner.code'
15
+        db.alter_column(u'partner_partner', 'code', self.gf('oscar.models.fields.autoslugfield.AutoSlugField')(allow_duplicates=False, max_length=128, separator=u'-', unique=True, populate_from='name', overwrite=False))
16
+
17
+    def backwards(self, orm):
18
+
19
+        # Changing field 'Partner.code'
20
+        db.alter_column(u'partner_partner', 'code', self.gf('django.db.models.fields.SlugField')(max_length=128, unique=True))
21
+
22
+    models = {
23
+        u'address.country': {
24
+            'Meta': {'ordering': "('-display_order', 'name')", 'object_name': 'Country'},
25
+            'display_order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
26
+            'is_shipping_country': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
27
+            'iso_3166_1_a2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
28
+            'iso_3166_1_a3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'db_index': 'True'}),
29
+            'iso_3166_1_numeric': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'db_index': 'True'}),
30
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
31
+            'printable_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
32
+        },
33
+        u'auth.group': {
34
+            'Meta': {'object_name': 'Group'},
35
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
36
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
37
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
38
+        },
39
+        u'auth.permission': {
40
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
41
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
42
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
43
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
44
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
45
+        },
46
+        AUTH_USER_MODEL: {
47
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
48
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
49
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
50
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
51
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
52
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
53
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
54
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
55
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
56
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
57
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
58
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
59
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
60
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
61
+        },
62
+        u'catalogue.attributeentity': {
63
+            'Meta': {'object_name': 'AttributeEntity'},
64
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
65
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
66
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
67
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': u"orm['catalogue.AttributeEntityType']"})
68
+        },
69
+        u'catalogue.attributeentitytype': {
70
+            'Meta': {'object_name': 'AttributeEntityType'},
71
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
72
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
73
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
74
+        },
75
+        u'catalogue.attributeoption': {
76
+            'Meta': {'object_name': 'AttributeOption'},
77
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': u"orm['catalogue.AttributeOptionGroup']"}),
78
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
80
+        },
81
+        u'catalogue.attributeoptiongroup': {
82
+            'Meta': {'object_name': 'AttributeOptionGroup'},
83
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
84
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
85
+        },
86
+        u'catalogue.category': {
87
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
88
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
89
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
90
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
91
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
93
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
94
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
95
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
96
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
97
+        },
98
+        u'catalogue.option': {
99
+            'Meta': {'object_name': 'Option'},
100
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
101
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
102
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
103
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
104
+        },
105
+        u'catalogue.product': {
106
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
107
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.ProductAttribute']", 'through': u"orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
108
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Category']", 'through': u"orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
109
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
110
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
111
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
112
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
113
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
114
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': u"orm['catalogue.Product']"}),
115
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'products'", 'null': 'True', 'to': u"orm['catalogue.ProductClass']"}),
116
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
117
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
118
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Product']", 'symmetrical': 'False', 'through': u"orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
119
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': u"orm['catalogue.Product']"}),
120
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
121
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
122
+            'status': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}),
123
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
124
+            'upc': ('oscar.models.fields.NullCharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
125
+        },
126
+        u'catalogue.productattribute': {
127
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
128
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
129
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
130
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
131
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
132
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
133
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': u"orm['catalogue.ProductClass']"}),
134
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
135
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
136
+        },
137
+        u'catalogue.productattributevalue': {
138
+            'Meta': {'object_name': 'ProductAttributeValue'},
139
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.ProductAttribute']"}),
140
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
141
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': u"orm['catalogue.Product']"}),
142
+            'value_boolean': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
143
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
144
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
145
+            'value_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
146
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
147
+            'value_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
148
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
149
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
150
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
151
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
152
+        },
153
+        u'catalogue.productcategory': {
154
+            'Meta': {'ordering': "['product', 'category']", 'object_name': 'ProductCategory'},
155
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Category']"}),
156
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
157
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
158
+        },
159
+        u'catalogue.productclass': {
160
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
161
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
162
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
163
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
164
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
165
+            'slug': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
166
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
167
+        },
168
+        u'catalogue.productrecommendation': {
169
+            'Meta': {'object_name': 'ProductRecommendation'},
170
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
171
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': u"orm['catalogue.Product']"}),
172
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
173
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
174
+        },
175
+        u'contenttypes.contenttype': {
176
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
177
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
178
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
179
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
180
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
181
+        },
182
+        u'partner.partner': {
183
+            'Meta': {'object_name': 'Partner'},
184
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
185
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
186
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
187
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['{0}']".format(AUTH_USER_MODEL)})
188
+        },
189
+        u'partner.partneraddress': {
190
+            'Meta': {'object_name': 'PartnerAddress'},
191
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['address.Country']"}),
192
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
193
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
194
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
195
+            'line1': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
196
+            'line2': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
197
+            'line3': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
198
+            'line4': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
199
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'addresses'", 'to': u"orm['partner.Partner']"}),
200
+            'postcode': ('oscar.models.fields.UppercaseCharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
201
+            'search_text': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
202
+            'state': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
203
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'})
204
+        },
205
+        u'partner.stockalert': {
206
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
207
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
208
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
209
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
210
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
211
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': u"orm['partner.StockRecord']"}),
212
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
213
+        },
214
+        u'partner.stockrecord': {
215
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
216
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
217
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
218
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
219
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
220
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
221
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
222
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
223
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['partner.Partner']"}),
224
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
225
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
226
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
227
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
228
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['catalogue.Product']"})
229
+        }
230
+    }
231
+
232
+    complete_apps = ['partner']

+ 235
- 0
sites/us/apps/partner/migrations/0012_no_null_in_charfields.py 查看文件

@@ -0,0 +1,235 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import DataMigration
5
+from django.db import models
6
+
7
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
8
+
9
+
10
+class Migration(DataMigration):
11
+
12
+    def forwards(self, orm):
13
+        orm.PartnerAddress.objects.filter(first_name__isnull=True).update(first_name='')
14
+        orm.PartnerAddress.objects.filter(title__isnull=True).update(title='')
15
+        orm.PartnerAddress.objects.filter(line4__isnull=True).update(line4='')
16
+        orm.PartnerAddress.objects.filter(line3__isnull=True).update(line3='')
17
+        orm.PartnerAddress.objects.filter(line2__isnull=True).update(line2='')
18
+        orm.PartnerAddress.objects.filter(state__isnull=True).update(state='')
19
+        orm.PartnerAddress.objects.filter(postcode__isnull=True).update(postcode='')
20
+        orm.Partner.objects.filter(name__isnull=True).update(name='')
21
+
22
+    def backwards(self, orm):
23
+        raise RuntimeError("Cannot reverse this migration.")
24
+
25
+    models = {
26
+        u'address.country': {
27
+            'Meta': {'ordering': "('-display_order', 'name')", 'object_name': 'Country'},
28
+            'display_order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
29
+            'is_shipping_country': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
30
+            'iso_3166_1_a2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
31
+            'iso_3166_1_a3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True', 'db_index': 'True'}),
32
+            'iso_3166_1_numeric': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'db_index': 'True'}),
33
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
34
+            'printable_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
35
+        },
36
+        u'auth.group': {
37
+            'Meta': {'object_name': 'Group'},
38
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
39
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
40
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
41
+        },
42
+        u'auth.permission': {
43
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
44
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
45
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
46
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
47
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
48
+        },
49
+        AUTH_USER_MODEL: {
50
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
51
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
52
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
53
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
54
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
55
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
56
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
57
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
58
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
59
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
60
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
61
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
62
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
63
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
64
+        },
65
+        u'catalogue.attributeentity': {
66
+            'Meta': {'object_name': 'AttributeEntity'},
67
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
68
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
69
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
70
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': u"orm['catalogue.AttributeEntityType']"})
71
+        },
72
+        u'catalogue.attributeentitytype': {
73
+            'Meta': {'object_name': 'AttributeEntityType'},
74
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
75
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
76
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
77
+        },
78
+        u'catalogue.attributeoption': {
79
+            'Meta': {'object_name': 'AttributeOption'},
80
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': u"orm['catalogue.AttributeOptionGroup']"}),
81
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
82
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
83
+        },
84
+        u'catalogue.attributeoptiongroup': {
85
+            'Meta': {'object_name': 'AttributeOptionGroup'},
86
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
87
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
88
+        },
89
+        u'catalogue.category': {
90
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
91
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
92
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
93
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
94
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
95
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
96
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
97
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
98
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
99
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
100
+        },
101
+        u'catalogue.option': {
102
+            'Meta': {'object_name': 'Option'},
103
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
104
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
105
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
106
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
107
+        },
108
+        u'catalogue.product': {
109
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
110
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.ProductAttribute']", 'through': u"orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
111
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Category']", 'through': u"orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
112
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
113
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
114
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
115
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
116
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
117
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': u"orm['catalogue.Product']"}),
118
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'products'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['catalogue.ProductClass']"}),
119
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
120
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
121
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Product']", 'symmetrical': 'False', 'through': u"orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
122
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': u"orm['catalogue.Product']"}),
123
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
124
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
125
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
126
+            'upc': ('oscar.models.fields.NullCharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
127
+        },
128
+        u'catalogue.productattribute': {
129
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
130
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
131
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
132
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
133
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
134
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
135
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': u"orm['catalogue.ProductClass']"}),
136
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
137
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
138
+        },
139
+        u'catalogue.productattributevalue': {
140
+            'Meta': {'object_name': 'ProductAttributeValue'},
141
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.ProductAttribute']"}),
142
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
143
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': u"orm['catalogue.Product']"}),
144
+            'value_boolean': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
145
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
146
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
147
+            'value_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
148
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
149
+            'value_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
150
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
151
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
152
+            'value_richtext': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
153
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
154
+        },
155
+        u'catalogue.productcategory': {
156
+            'Meta': {'ordering': "['product', 'category']", 'object_name': 'ProductCategory'},
157
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Category']"}),
158
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
159
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
160
+        },
161
+        u'catalogue.productclass': {
162
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
163
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
164
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
165
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
166
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
167
+            'slug': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
168
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
169
+        },
170
+        u'catalogue.productrecommendation': {
171
+            'Meta': {'object_name': 'ProductRecommendation'},
172
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
173
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': u"orm['catalogue.Product']"}),
174
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
175
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
176
+        },
177
+        u'contenttypes.contenttype': {
178
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
179
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
180
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
181
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
182
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
183
+        },
184
+        u'partner.partner': {
185
+            'Meta': {'object_name': 'Partner'},
186
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
187
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
188
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
189
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['{0}']".format(AUTH_USER_MODEL)})
190
+        },
191
+        u'partner.partneraddress': {
192
+            'Meta': {'object_name': 'PartnerAddress'},
193
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['address.Country']"}),
194
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
195
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
196
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
197
+            'line1': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
198
+            'line2': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
199
+            'line3': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
200
+            'line4': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
201
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'addresses'", 'to': u"orm['partner.Partner']"}),
202
+            'postcode': ('oscar.models.fields.UppercaseCharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
203
+            'search_text': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
204
+            'state': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
205
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'})
206
+        },
207
+        u'partner.stockalert': {
208
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
209
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
210
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
211
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
212
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
213
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': u"orm['partner.StockRecord']"}),
214
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
215
+        },
216
+        u'partner.stockrecord': {
217
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
218
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
219
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
220
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
221
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
222
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
223
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
224
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
225
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['partner.Partner']"}),
226
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
227
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
228
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
229
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
230
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['catalogue.Product']"})
231
+        }
232
+    }
233
+
234
+    complete_apps = ['partner']
235
+    symmetrical = True

+ 273
- 0
sites/us/apps/partner/migrations/0013_auto__chg_field_partneraddress_first_name__chg_field_partneraddress_ti.py 查看文件

@@ -0,0 +1,273 @@
1
+# -*- coding: utf-8 -*-
2
+import datetime
3
+from south.db import db
4
+from south.v2 import SchemaMigration
5
+from django.db import models
6
+
7
+from oscar.core.compat import AUTH_USER_MODEL, AUTH_USER_MODEL_NAME
8
+
9
+
10
+class Migration(SchemaMigration):
11
+
12
+    def forwards(self, orm):
13
+
14
+        # Changing field 'PartnerAddress.first_name'
15
+        db.alter_column(u'partner_partneraddress', 'first_name', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
16
+
17
+        # Changing field 'PartnerAddress.title'
18
+        db.alter_column(u'partner_partneraddress', 'title', self.gf('django.db.models.fields.CharField')(default='', max_length=64))
19
+
20
+        # Changing field 'PartnerAddress.line4'
21
+        db.alter_column(u'partner_partneraddress', 'line4', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
22
+
23
+        # Changing field 'PartnerAddress.line3'
24
+        db.alter_column(u'partner_partneraddress', 'line3', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
25
+
26
+        # Changing field 'PartnerAddress.line2'
27
+        db.alter_column(u'partner_partneraddress', 'line2', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
28
+
29
+        # Changing field 'PartnerAddress.state'
30
+        db.alter_column(u'partner_partneraddress', 'state', self.gf('django.db.models.fields.CharField')(default='', max_length=255))
31
+
32
+        # Changing field 'PartnerAddress.postcode'
33
+        db.alter_column(u'partner_partneraddress', 'postcode', self.gf('oscar.models.fields.UppercaseCharField')(default='', max_length=64))
34
+
35
+        # Changing field 'Partner.name'
36
+        db.alter_column(u'partner_partner', 'name', self.gf('django.db.models.fields.CharField')(default='', max_length=128))
37
+
38
+    def backwards(self, orm):
39
+
40
+        # Changing field 'PartnerAddress.first_name'
41
+        db.alter_column(u'partner_partneraddress', 'first_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
42
+
43
+        # Changing field 'PartnerAddress.title'
44
+        db.alter_column(u'partner_partneraddress', 'title', self.gf('django.db.models.fields.CharField')(max_length=64, null=True))
45
+
46
+        # Changing field 'PartnerAddress.line4'
47
+        db.alter_column(u'partner_partneraddress', 'line4', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
48
+
49
+        # Changing field 'PartnerAddress.line3'
50
+        db.alter_column(u'partner_partneraddress', 'line3', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
51
+
52
+        # Changing field 'PartnerAddress.line2'
53
+        db.alter_column(u'partner_partneraddress', 'line2', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
54
+
55
+        # Changing field 'PartnerAddress.state'
56
+        db.alter_column(u'partner_partneraddress', 'state', self.gf('django.db.models.fields.CharField')(max_length=255, null=True))
57
+
58
+        # Changing field 'PartnerAddress.postcode'
59
+        db.alter_column(u'partner_partneraddress', 'postcode', self.gf('oscar.models.fields.UppercaseCharField')(max_length=64, null=True))
60
+
61
+        # Changing field 'Partner.name'
62
+        db.alter_column(u'partner_partner', 'name', self.gf('django.db.models.fields.CharField')(max_length=128, null=True))
63
+
64
+    models = {
65
+        u'address.country': {
66
+            'Meta': {'ordering': "('-display_order', 'name')", 'object_name': 'Country'},
67
+            'display_order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0', 'db_index': 'True'}),
68
+            'is_shipping_country': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
69
+            'iso_3166_1_a2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
70
+            'iso_3166_1_a3': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '3', 'blank': 'True'}),
71
+            'iso_3166_1_numeric': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'db_index': 'True'}),
72
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
73
+            'printable_name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
74
+        },
75
+        u'auth.group': {
76
+            'Meta': {'object_name': 'Group'},
77
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
78
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
79
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
80
+        },
81
+        u'auth.permission': {
82
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
83
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
84
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
85
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
86
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
87
+        },
88
+        AUTH_USER_MODEL: {
89
+            'Meta': {'object_name': AUTH_USER_MODEL_NAME},
90
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
91
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
92
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
93
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
94
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
95
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
96
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
97
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
98
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
99
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
100
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
101
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
102
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
103
+        },
104
+        u'catalogue.attributeentity': {
105
+            'Meta': {'object_name': 'AttributeEntity'},
106
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
107
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
108
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}),
109
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'entities'", 'to': u"orm['catalogue.AttributeEntityType']"})
110
+        },
111
+        u'catalogue.attributeentitytype': {
112
+            'Meta': {'object_name': 'AttributeEntityType'},
113
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
114
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
115
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'})
116
+        },
117
+        u'catalogue.attributeoption': {
118
+            'Meta': {'object_name': 'AttributeOption'},
119
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'options'", 'to': u"orm['catalogue.AttributeOptionGroup']"}),
120
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
121
+            'option': ('django.db.models.fields.CharField', [], {'max_length': '255'})
122
+        },
123
+        u'catalogue.attributeoptiongroup': {
124
+            'Meta': {'object_name': 'AttributeOptionGroup'},
125
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
126
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'})
127
+        },
128
+        u'catalogue.category': {
129
+            'Meta': {'ordering': "['full_name']", 'object_name': 'Category'},
130
+            'depth': ('django.db.models.fields.PositiveIntegerField', [], {}),
131
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
132
+            'full_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
133
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
134
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
135
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
136
+            'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
137
+            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
138
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'})
139
+        },
140
+        u'catalogue.option': {
141
+            'Meta': {'object_name': 'Option'},
142
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
143
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
144
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
145
+            'type': ('django.db.models.fields.CharField', [], {'default': "'Required'", 'max_length': '128'})
146
+        },
147
+        u'catalogue.product': {
148
+            'Meta': {'ordering': "['-date_created']", 'object_name': 'Product'},
149
+            'attributes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.ProductAttribute']", 'through': u"orm['catalogue.ProductAttributeValue']", 'symmetrical': 'False'}),
150
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Category']", 'through': u"orm['catalogue.ProductCategory']", 'symmetrical': 'False'}),
151
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
152
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
153
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
154
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
155
+            'is_discountable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
156
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'variants'", 'null': 'True', 'to': u"orm['catalogue.Product']"}),
157
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'products'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['catalogue.ProductClass']"}),
158
+            'product_options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
159
+            'rating': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
160
+            'recommended_products': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Product']", 'symmetrical': 'False', 'through': u"orm['catalogue.ProductRecommendation']", 'blank': 'True'}),
161
+            'related_products': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'relations'", 'blank': 'True', 'to': u"orm['catalogue.Product']"}),
162
+            'score': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
163
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
164
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
165
+            'upc': ('oscar.models.fields.NullCharField', [], {'max_length': '64', 'unique': 'True', 'null': 'True', 'blank': 'True'})
166
+        },
167
+        u'catalogue.productattribute': {
168
+            'Meta': {'ordering': "['code']", 'object_name': 'ProductAttribute'},
169
+            'code': ('django.db.models.fields.SlugField', [], {'max_length': '128'}),
170
+            'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntityType']", 'null': 'True', 'blank': 'True'}),
171
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
172
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
173
+            'option_group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOptionGroup']", 'null': 'True', 'blank': 'True'}),
174
+            'product_class': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attributes'", 'null': 'True', 'to': u"orm['catalogue.ProductClass']"}),
175
+            'required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
176
+            'type': ('django.db.models.fields.CharField', [], {'default': "'text'", 'max_length': '20'})
177
+        },
178
+        u'catalogue.productattributevalue': {
179
+            'Meta': {'object_name': 'ProductAttributeValue'},
180
+            'attribute': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.ProductAttribute']"}),
181
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
182
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_values'", 'to': u"orm['catalogue.Product']"}),
183
+            'value_boolean': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
184
+            'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
185
+            'value_entity': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeEntity']", 'null': 'True', 'blank': 'True'}),
186
+            'value_file': ('django.db.models.fields.files.FileField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
187
+            'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
188
+            'value_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
189
+            'value_integer': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
190
+            'value_option': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.AttributeOption']", 'null': 'True', 'blank': 'True'}),
191
+            'value_richtext': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
192
+            'value_text': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
193
+        },
194
+        u'catalogue.productcategory': {
195
+            'Meta': {'ordering': "['product', 'category']", 'object_name': 'ProductCategory'},
196
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Category']"}),
197
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
199
+        },
200
+        u'catalogue.productclass': {
201
+            'Meta': {'ordering': "['name']", 'object_name': 'ProductClass'},
202
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
203
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
204
+            'options': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['catalogue.Option']", 'symmetrical': 'False', 'blank': 'True'}),
205
+            'requires_shipping': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
206
+            'slug': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
207
+            'track_stock': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
208
+        },
209
+        u'catalogue.productrecommendation': {
210
+            'Meta': {'object_name': 'ProductRecommendation'},
211
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
212
+            'primary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'primary_recommendations'", 'to': u"orm['catalogue.Product']"}),
213
+            'ranking': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
214
+            'recommendation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['catalogue.Product']"})
215
+        },
216
+        u'contenttypes.contenttype': {
217
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
218
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
219
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
220
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
221
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
222
+        },
223
+        u'partner.partner': {
224
+            'Meta': {'object_name': 'Partner'},
225
+            'code': ('oscar.models.fields.autoslugfield.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '128', 'separator': "u'-'", 'blank': 'True', 'unique': 'True', 'populate_from': "'name'", 'overwrite': 'False'}),
226
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
227
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}),
228
+            'users': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'partners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['{0}']".format(AUTH_USER_MODEL)})
229
+        },
230
+        u'partner.partneraddress': {
231
+            'Meta': {'object_name': 'PartnerAddress'},
232
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['address.Country']"}),
233
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
234
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
235
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
236
+            'line1': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
237
+            'line2': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
238
+            'line3': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
239
+            'line4': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
240
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'addresses'", 'to': u"orm['partner.Partner']"}),
241
+            'postcode': ('oscar.models.fields.UppercaseCharField', [], {'max_length': '64', 'blank': 'True'}),
242
+            'search_text': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
243
+            'state': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
244
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'})
245
+        },
246
+        u'partner.stockalert': {
247
+            'Meta': {'ordering': "('-date_created',)", 'object_name': 'StockAlert'},
248
+            'date_closed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
249
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
250
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
251
+            'status': ('django.db.models.fields.CharField', [], {'default': "'Open'", 'max_length': '128'}),
252
+            'stockrecord': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'alerts'", 'to': u"orm['partner.StockRecord']"}),
253
+            'threshold': ('django.db.models.fields.PositiveIntegerField', [], {})
254
+        },
255
+        u'partner.stockrecord': {
256
+            'Meta': {'unique_together': "(('partner', 'partner_sku'),)", 'object_name': 'StockRecord'},
257
+            'cost_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
258
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
259
+            'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
260
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
261
+            'low_stock_threshold': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
262
+            'num_allocated': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
263
+            'num_in_stock': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
264
+            'partner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['partner.Partner']"}),
265
+            'partner_sku': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
266
+            'price_currency': ('django.db.models.fields.CharField', [], {'default': "'GBP'", 'max_length': '12'}),
267
+            'price_excl_tax': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
268
+            'price_retail': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
269
+            'product': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'stockrecords'", 'to': u"orm['catalogue.Product']"})
270
+        }
271
+    }
272
+
273
+    complete_apps = ['partner']

+ 0
- 0
sites/us/apps/partner/migrations/__init__.py 查看文件


+ 1
- 0
sites/us/apps/partner/models.py 查看文件

@@ -0,0 +1 @@
1
+from oscar.apps.partner.models import *

+ 7
- 0
sites/us/apps/partner/strategy.py 查看文件

@@ -0,0 +1,7 @@
1
+from oscar.apps.partner import strategy
2
+
3
+
4
+class Selector(object):
5
+
6
+    def strategy(self, request=None, user=None, **kwargs):
7
+        return strategy.US(request)

+ 35
- 0
sites/us/apps/tax.py 查看文件

@@ -0,0 +1,35 @@
1
+from decimal import Decimal as D
2
+
3
+
4
+# State tax rates
5
+STATE_TAX_RATES = {
6
+    'NJ': D('0.07')
7
+}
8
+ZERO = D('0.00')
9
+
10
+
11
+def apply_to(submission):
12
+    """
13
+    Calculate and apply taxes to a submission
14
+    """
15
+    # This is a dummy tax function which only applies taxes for addresses in
16
+    # New Jersey and New York. In reality, you'll probably want to use a tax
17
+    # service like Avalara to look up the taxes for a given submission.
18
+    shipping_address = submission['shipping_address']
19
+    rate = STATE_TAX_RATES.get(
20
+        shipping_address.state, ZERO)
21
+    for line in submission['basket'].all_lines():
22
+        line_tax = calculate_tax(
23
+            line.line_price_excl_tax_incl_discounts, rate)
24
+        # We need to split the line tax down into a unit tax amount.
25
+        unit_tax = (line_tax / line.quantity).quantize(D('0.01'))
26
+        line.purchase_info.price.tax = unit_tax
27
+
28
+    # We don't charge sales tax on shipping
29
+    shipping_method = submission['shipping_method']
30
+    shipping_method.tax = D('0.00')
31
+
32
+
33
+def calculate_tax(price, rate):
34
+    tax = price * rate
35
+    return tax.quantize(D('0.01'))

+ 2930
- 0
sites/us/fixtures/countries.json
文件差異過大導致無法顯示
查看文件


+ 93
- 0
sites/us/fixtures/product-attributes.json 查看文件

@@ -0,0 +1,93 @@
1
+[
2
+    {
3
+        "pk": 1,
4
+        "model": "catalogue.productattribute",
5
+        "fields": {
6
+            "code": "author",
7
+            "product_class": 1,
8
+            "entity_type": null,
9
+            "option_group": null,
10
+            "required": false,
11
+            "type": "text",
12
+            "name": "Author"
13
+        }
14
+    },
15
+    {
16
+        "pk": 2, 
17
+        "model": "catalogue.productattribute", 
18
+        "fields": {
19
+            "code": "binding", 
20
+            "product_class": 1, 
21
+            "entity_type": null, 
22
+            "option_group": null, 
23
+            "required": false, 
24
+            "type": "text", 
25
+            "name": "Binding"
26
+        }
27
+    }, 
28
+    {
29
+        "pk": 3, 
30
+        "model": "catalogue.productattribute", 
31
+        "fields": {
32
+            "code": "language", 
33
+            "product_class": 1, 
34
+            "entity_type": null, 
35
+            "option_group": null, 
36
+            "required": false, 
37
+            "type": "text", 
38
+            "name": "Language"
39
+        }
40
+    }, 
41
+    {
42
+        "pk": 4, 
43
+        "model": "catalogue.productattribute", 
44
+        "fields": {
45
+            "code": "number_of_pages", 
46
+            "product_class": 1, 
47
+            "entity_type": null, 
48
+            "option_group": null, 
49
+            "required": false, 
50
+            "type": "integer", 
51
+            "name": "Number of pages"
52
+        }
53
+    }, 
54
+    {
55
+        "pk": 5,
56
+        "model": "catalogue.productattribute",
57
+        "fields": {
58
+            "code": "publication_date",
59
+            "product_class": 1,
60
+            "entity_type": null,
61
+            "option_group": null,
62
+            "required": false,
63
+            "type": "date",
64
+            "name": "Publication Date"
65
+        }
66
+    },
67
+    {
68
+        "pk": 6, 
69
+        "model": "catalogue.productattribute", 
70
+        "fields": {
71
+            "code": "publisher", 
72
+            "product_class": 1, 
73
+            "entity_type": null, 
74
+            "option_group": null, 
75
+            "required": false, 
76
+            "type": "text", 
77
+            "name": "Publisher"
78
+        }
79
+    }, 
80
+    {
81
+        "pk": 7,
82
+        "model": "catalogue.productattribute",
83
+        "fields": {
84
+            "code": "weight",
85
+            "product_class": 1,
86
+            "entity_type": null,
87
+            "option_group": null,
88
+            "required": false,
89
+            "type": "integer",
90
+            "name": "Weight"
91
+        }
92
+    }
93
+]

+ 13
- 0
sites/us/fixtures/product-classes.json 查看文件

@@ -0,0 +1,13 @@
1
+[
2
+    {
3
+        "pk": 1, 
4
+        "model": "catalogue.productclass", 
5
+        "fields": {
6
+            "track_stock": true, 
7
+            "options": [], 
8
+            "requires_shipping": true, 
9
+            "name": "Books", 
10
+            "slug": "books"
11
+        }
12
+    } 
13
+]

+ 10
- 0
sites/us/manage.py 查看文件

@@ -0,0 +1,10 @@
1
+#!/usr/bin/env python
2
+import os
3
+import sys
4
+
5
+if __name__ == "__main__":
6
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
7
+
8
+    from django.core.management import execute_from_command_line
9
+
10
+    execute_from_command_line(sys.argv)

+ 403
- 0
sites/us/settings.py 查看文件

@@ -0,0 +1,403 @@
1
+import os
2
+
3
+# Path helper
4
+PROJECT_DIR = os.path.dirname(__file__)
5
+location = lambda x: os.path.join(
6
+    os.path.dirname(os.path.realpath(__file__)), x)
7
+
8
+USE_TZ = True
9
+
10
+DEBUG = True
11
+TEMPLATE_DEBUG = True
12
+SQL_DEBUG = True
13
+
14
+ADMINS = ()
15
+EMAIL_SUBJECT_PREFIX = '[Oscar US sandbox] '
16
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
17
+
18
+MANAGERS = ADMINS
19
+
20
+# Use a Sqlite database by default
21
+DATABASES = {
22
+    'default': {
23
+        'ENGINE': 'django.db.backends.sqlite3',
24
+        'NAME': os.path.join(os.path.dirname(__file__), 'db.sqlite'),
25
+        'USER': '',
26
+        'PASSWORD': '',
27
+        'HOST': '',
28
+        'PORT': '',
29
+        'ATOMIC_REQUESTS': True
30
+    }
31
+}
32
+
33
+CACHES = {
34
+    'default': {
35
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
36
+    }
37
+}
38
+
39
+
40
+# Local time zone for this installation. Choices can be found here:
41
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
42
+# although not all choices may be available on all operating systems.
43
+# On Unix systems, a value of None will cause Django to use the same
44
+# timezone as the operating system.
45
+# If running in a Windows environment this must be set to the same as your
46
+# system time zone.
47
+TIME_ZONE = 'Europe/London'
48
+
49
+# Language code for this installation. All choices can be found here:
50
+# http://www.i18nguy.com/unicode/language-identifiers.html
51
+LANGUAGE_CODE = 'en-gb'
52
+
53
+# Includes all languages that have >50% coverage in Transifex
54
+# Taken from Django's default setting for LANGUAGES
55
+gettext_noop = lambda s: s
56
+LANGUAGES = (
57
+    ('en-us', gettext_noop('American English')),
58
+)
59
+
60
+SITE_ID = 1
61
+
62
+# If you set this to False, Django will make some optimizations so as not
63
+# to load the internationalization machinery.
64
+USE_I18N = True
65
+
66
+# If you set this to False, Django will not format dates, numbers and
67
+# calendars according to the current locale
68
+USE_L10N = True
69
+
70
+# Absolute path to the directory that holds media.
71
+# Example: "/home/media/media.lawrence.com/"
72
+MEDIA_ROOT = location("public/media")
73
+
74
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
75
+# trailing slash if there is a path component (optional in other cases).
76
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
77
+MEDIA_URL = '/media/'
78
+
79
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
80
+# trailing slash.
81
+# Examples: "http://foo.com/media/", "/media/".
82
+#ADMIN_MEDIA_PREFIX = '/media/admin/'
83
+
84
+STATIC_URL = '/static/'
85
+STATIC_ROOT = location('public/static')
86
+STATICFILES_DIRS = (
87
+    location('static/'),
88
+)
89
+STATICFILES_FINDERS = (
90
+    'django.contrib.staticfiles.finders.FileSystemFinder',
91
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
92
+    'compressor.finders.CompressorFinder',
93
+)
94
+
95
+# Make this unique, and don't share it with anybody.
96
+SECRET_KEY = '$)a6n&o80u!6y5t-+jrd3)3!%vh&shg$wqpjpxc!ar&p#!)n1a'
97
+
98
+# List of callables that know how to import templates from various sources.
99
+TEMPLATE_LOADERS = (
100
+    'django.template.loaders.filesystem.Loader',
101
+    'django.template.loaders.app_directories.Loader',
102
+    # needed by django-treebeard for admin (and potentially other libs)
103
+    'django.template.loaders.eggs.Loader',
104
+)
105
+
106
+TEMPLATE_CONTEXT_PROCESSORS = (
107
+    "django.contrib.auth.context_processors.auth",
108
+    "django.core.context_processors.request",
109
+    "django.core.context_processors.debug",
110
+    "django.core.context_processors.i18n",
111
+    "django.core.context_processors.media",
112
+    "django.core.context_processors.static",
113
+    "django.contrib.messages.context_processors.messages",
114
+    # Oscar specific
115
+    'oscar.apps.search.context_processors.search_form',
116
+    'oscar.apps.promotions.context_processors.promotions',
117
+    'oscar.apps.checkout.context_processors.checkout',
118
+    'oscar.core.context_processors.metadata',
119
+    'oscar.apps.customer.notifications.context_processors.notifications',
120
+)
121
+
122
+MIDDLEWARE_CLASSES = (
123
+    'debug_toolbar.middleware.DebugToolbarMiddleware',
124
+    'django.contrib.sessions.middleware.SessionMiddleware',
125
+    'django.middleware.csrf.CsrfViewMiddleware',
126
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
127
+    'django.contrib.messages.middleware.MessageMiddleware',
128
+    'django.middleware.transaction.TransactionMiddleware',
129
+    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
130
+    # Allow languages to be selected
131
+    'django.middleware.locale.LocaleMiddleware',
132
+    'django.middleware.common.CommonMiddleware',
133
+    # Ensure a valid basket is added to the request instance for every request
134
+    'oscar.apps.basket.middleware.BasketMiddleware',
135
+    # Enable the ProfileMiddleware, then add ?cprofile to any
136
+    # URL path to print out profile details
137
+    #'oscar.profiling.middleware.ProfileMiddleware',
138
+)
139
+
140
+ROOT_URLCONF = 'urls'
141
+
142
+# Add another path to Oscar's templates.  This allows templates to be
143
+# customised easily.
144
+from oscar import OSCAR_MAIN_TEMPLATE_DIR
145
+TEMPLATE_DIRS = (
146
+    location('templates'),
147
+    OSCAR_MAIN_TEMPLATE_DIR,
148
+)
149
+
150
+# A sample logging configuration. The only tangible logging
151
+# performed by this configuration is to send an email to
152
+# the site admins on every HTTP 500 error.
153
+# See http://docs.djangoproject.com/en/dev/topics/logging for
154
+# more details on how to customize your logging configuration.
155
+LOGGING = {
156
+    'version': 1,
157
+    'disable_existing_loggers': True,
158
+    'formatters': {
159
+        'verbose': {
160
+            'format': '%(levelname)s %(asctime)s %(module)s %(message)s',
161
+        },
162
+        'simple': {
163
+            'format': '[%(asctime)s] %(message)s'
164
+        },
165
+    },
166
+    'filters': {
167
+        'require_debug_false': {
168
+            '()': 'django.utils.log.RequireDebugFalse'
169
+        }
170
+    },
171
+    'handlers': {
172
+        'null': {
173
+            'level': 'DEBUG',
174
+            'class': 'django.utils.log.NullHandler',
175
+        },
176
+        'console': {
177
+            'level': 'DEBUG',
178
+            'class': 'logging.StreamHandler',
179
+            'formatter': 'verbose'
180
+        },
181
+        'checkout_file': {
182
+            'level': 'INFO',
183
+            'class': 'oscar.core.logging.handlers.EnvFileHandler',
184
+            'filename': 'checkout.log',
185
+            'formatter': 'verbose'
186
+        },
187
+        'gateway_file': {
188
+            'level': 'INFO',
189
+            'class': 'oscar.core.logging.handlers.EnvFileHandler',
190
+            'filename': 'gateway.log',
191
+            'formatter': 'simple'
192
+        },
193
+        'error_file': {
194
+            'level': 'INFO',
195
+            'class': 'oscar.core.logging.handlers.EnvFileHandler',
196
+            'filename': 'errors.log',
197
+            'formatter': 'verbose'
198
+        },
199
+        'sorl_file': {
200
+            'level': 'INFO',
201
+            'class': 'oscar.core.logging.handlers.EnvFileHandler',
202
+            'filename': 'sorl.log',
203
+            'formatter': 'verbose'
204
+        },
205
+        'mail_admins': {
206
+            'level': 'ERROR',
207
+            'class': 'django.utils.log.AdminEmailHandler',
208
+            'filters': ['require_debug_false'],
209
+        },
210
+    },
211
+    'loggers': {
212
+        # Django loggers
213
+        'django': {
214
+            'handlers': ['null'],
215
+            'propagate': True,
216
+            'level': 'INFO',
217
+        },
218
+        'django.request': {
219
+            'handlers': ['mail_admins', 'error_file'],
220
+            'level': 'ERROR',
221
+            'propagate': False,
222
+        },
223
+        'django.db.backends': {
224
+            'handlers': ['null'],
225
+            'propagate': False,
226
+            'level': 'DEBUG',
227
+        },
228
+        # Oscar core loggers
229
+        'oscar.checkout': {
230
+            'handlers': ['console', 'checkout_file'],
231
+            'propagate': False,
232
+            'level': 'INFO',
233
+        },
234
+        'oscar.catalogue.import': {
235
+            'handlers': ['console'],
236
+            'propagate': False,
237
+            'level': 'INFO',
238
+        },
239
+        'oscar.alerts': {
240
+            'handlers': ['null'],
241
+            'propagate': False,
242
+            'level': 'INFO',
243
+        },
244
+        # Sandbox logging
245
+        'gateway': {
246
+            'handlers': ['gateway_file'],
247
+            'propagate': True,
248
+            'level': 'INFO',
249
+        },
250
+        # Third party
251
+        'south': {
252
+            'handlers': ['null'],
253
+            'propagate': True,
254
+            'level': 'INFO',
255
+        },
256
+        'sorl.thumbnail': {
257
+            'handlers': ['sorl_file'],
258
+            'propagate': True,
259
+            'level': 'INFO',
260
+        },
261
+        # Suppress output of this debug toolbar panel
262
+        'template_timings_panel': {
263
+            'handlers': ['null'],
264
+            'level': 'DEBUG',
265
+            'propagate': False,
266
+        }
267
+    }
268
+}
269
+
270
+
271
+INSTALLED_APPS = [
272
+    'django.contrib.auth',
273
+    'django.contrib.contenttypes',
274
+    'django.contrib.sessions',
275
+    'django.contrib.sites',
276
+    'django.contrib.messages',
277
+    'django.contrib.admin',
278
+    'django.contrib.flatpages',
279
+    'django.contrib.staticfiles',
280
+    'django.contrib.sitemaps',
281
+    'django_extensions',
282
+    # Debug toolbar + extensions
283
+    'debug_toolbar',
284
+    'template_timings_panel',
285
+    'south',
286
+    'compressor',       # Oscar's templates use compressor
287
+]
288
+from oscar import get_core_apps
289
+INSTALLED_APPS = INSTALLED_APPS + get_core_apps(
290
+    ['apps.partner', 'apps.checkout'])
291
+
292
+# Add Oscar's custom auth backend so users can sign in using their email
293
+# address.
294
+AUTHENTICATION_BACKENDS = (
295
+    'oscar.apps.customer.auth_backends.Emailbackend',
296
+    'django.contrib.auth.backends.ModelBackend',
297
+)
298
+
299
+LOGIN_REDIRECT_URL = '/'
300
+APPEND_SLASH = True
301
+
302
+# Haystack settings
303
+HAYSTACK_CONNECTIONS = {
304
+    'default': {
305
+        'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
306
+        'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
307
+    },
308
+}
309
+
310
+# =============
311
+# Debug Toolbar
312
+# =============
313
+
314
+# Implicit setup can often lead to problems with circular imports, so we
315
+# explicitly wire up the toolbar
316
+DEBUG_TOOLBAR_PATCH_SETTINGS = False
317
+DEBUG_TOOLBAR_PANELS = [
318
+    'debug_toolbar.panels.versions.VersionsPanel',
319
+    'debug_toolbar.panels.timer.TimerPanel',
320
+    'debug_toolbar.panels.settings.SettingsPanel',
321
+    'debug_toolbar.panels.headers.HeadersPanel',
322
+    'debug_toolbar.panels.request.RequestPanel',
323
+    'debug_toolbar.panels.sql.SQLPanel',
324
+    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
325
+    'debug_toolbar.panels.templates.TemplatesPanel',
326
+    'template_timings_panel.panels.TemplateTimings.TemplateTimings',
327
+    'debug_toolbar.panels.cache.CachePanel',
328
+    'debug_toolbar.panels.signals.SignalsPanel',
329
+    'debug_toolbar.panels.logging.LoggingPanel',
330
+    'debug_toolbar.panels.redirects.RedirectsPanel',
331
+]
332
+INTERNAL_IPS = ['127.0.0.1', '::1']
333
+
334
+# ==============
335
+# Oscar settings
336
+# ==============
337
+
338
+from oscar.defaults import *
339
+
340
+# Meta
341
+# ====
342
+
343
+OSCAR_SHOP_TAGLINE = 'US Sandbox'
344
+OSCAR_DEFAULT_CURRENCY = 'USD'
345
+OSCAR_ALLOW_ANON_CHECKOUT = True
346
+
347
+# LESS/CSS/statics
348
+# ================
349
+
350
+# We default to using CSS files, rather than the LESS files that generate them.
351
+# If you want to develop Oscar's CSS, then set USE_LESS=True and
352
+# COMPRESS_ENABLED=False in your settings_local module and ensure you have
353
+# 'lessc' installed.  You can do this by running:
354
+#
355
+#    pip install -r requirements_less.txt
356
+#
357
+# which will install node.js and less in your virtualenv.
358
+
359
+USE_LESS = False
360
+
361
+COMPRESS_ENABLED = True
362
+COMPRESS_PRECOMPILERS = (
363
+    ('text/less', 'lessc {infile} {outfile}'),
364
+)
365
+COMPRESS_OFFLINE_CONTEXT = {
366
+    'STATIC_URL': 'STATIC_URL',
367
+    'use_less': USE_LESS,
368
+}
369
+
370
+# We do this to work around an issue in compressor where the LESS files are
371
+# compiled but compression isn't enabled.  When this happens, the relative URL
372
+# is wrong between the generated CSS file and other assets:
373
+# https://github.com/jezdez/django_compressor/issues/226
374
+COMPRESS_OUTPUT_DIR = 'oscar'
375
+
376
+# Logging
377
+# =======
378
+
379
+LOG_ROOT = location('logs')
380
+# Ensure log root exists
381
+if not os.path.exists(LOG_ROOT):
382
+    os.mkdir(LOG_ROOT)
383
+
384
+# Sorl
385
+# ====
386
+
387
+THUMBNAIL_DEBUG = True
388
+THUMBNAIL_KEY_PREFIX = 'oscar-us-sandbox'
389
+
390
+# Use a custom KV store to handle integrity error
391
+THUMBNAIL_KVSTORE = 'oscar.sorl_kvstore.ConcurrentKVStore'
392
+
393
+# Django 1.6 has switched to JSON serializing for security reasons, but it does not
394
+# serialize Models. We should resolve this by extending the
395
+# django/core/serializers/json.Serializer to have the `dumps` function. Also
396
+# in tests/config.py
397
+SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
398
+
399
+# Try and import local settings which can be used to override any of the above.
400
+try:
401
+    from settings_local import *
402
+except ImportError:
403
+    pass

+ 35
- 0
sites/us/urls.py 查看文件

@@ -0,0 +1,35 @@
1
+from django.conf.urls import include, url
2
+from django.conf import settings
3
+from django.conf.urls.i18n import i18n_patterns
4
+from django.contrib import admin
5
+from django.conf.urls.static import static
6
+
7
+from oscar.app import application
8
+from oscar.views import handler500, handler404, handler403  # noqa
9
+
10
+
11
+admin.autodiscover()
12
+
13
+urlpatterns = [
14
+    # Include admin as convenience. It's unsupported and you should
15
+    # use the dashboard
16
+    url(r'^admin/', include(admin.site.urls)),
17
+    # i18n URLS need to live outside of i18n_patterns scope of the shop
18
+    url(r'^i18n/', include('django.conf.urls.i18n')),
19
+]
20
+
21
+# Prefix Oscar URLs with language codes
22
+urlpatterns += i18n_patterns('',
23
+    # Oscar's normal URLs
24
+    url(r'', include(application.urls)),
25
+)
26
+
27
+if settings.DEBUG:
28
+    import debug_toolbar
29
+
30
+    # Server statics and uploaded media
31
+    urlpatterns += static(settings.MEDIA_URL,
32
+                          document_root=settings.MEDIA_ROOT)
33
+    urlpatterns += [
34
+        url(r'^__debug__/', include(debug_toolbar.urls)),
35
+    ]

Loading…
取消
儲存