class Course(models.Model): vendor = models.TextField() year_start = models.PositiveSmallIntegerField(help_text="YYYY") year_end = models.PositiveSmallIntegerField(help_text="YYYY", blank=True, null=True, default=None) is_expiration = models.BooleanField() title = models.TextField() description = tinymce.models.HTMLField(blank=True) link = models.URLField(blank=True, null=True, default=None) small_icon = models.ImageField(blank=True, null=True, default=None) tags = models.ManyToManyField('tags.Tag', null=True) class Meta: ordering = ('-year_start', ) def year_range_str(self): if self.is_expiration: return "{} - {}".format(self.year_start, self.year_end) else: return self.year_start def __str__(self): return "{year} {vendor} - {title}".format(year=self.year_start, vendor=self.vendor, title=self.title)
class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='GoodsInfo', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('gtitle', models.CharField(max_length=20, verbose_name='商品名称')), ('gpic', models.ImageField(blank=True, null=True, upload_to='df_goods', verbose_name='商品图片')), ('gprice', models.DecimalField(decimal_places=2, max_digits=7, verbose_name='商品价格')), ('gunit', models.CharField(default='500g', max_length=20, verbose_name='商品单位')), ('gclick', models.IntegerField(verbose_name='点击量')), ('isDelete', models.BooleanField(default=False, verbose_name='是否删除')), ('gjianjie', models.CharField(max_length=200, verbose_name='简介')), ('gkucun', models.IntegerField(verbose_name='库存')), ('gcontent', tinymce.models.HTMLField(verbose_name='详细介绍')), ], options={ 'verbose_name': '商品信息', 'verbose_name_plural': '商品信息', }, ), migrations.CreateModel( name='TypeInfo', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('ttitle', models.CharField(max_length=20, verbose_name='类型名称')), ('isDelete', models.BooleanField(default=False, verbose_name='是否删除')), ], options={ 'verbose_name': '分类信息', 'verbose_name_plural': '分类信息', }, ), migrations.AddField( model_name='goodsinfo', name='gtype', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='df_goods.TypeInfo', verbose_name='所属分类'), ), ]
class Skill(models.Model): tag = models.OneToOneField('tags.Tag', on_delete=models.CASCADE) priority = models.PositiveSmallIntegerField() # displayable in the SECTIONS area. not related to any reference from anywhere else. displayable = models.BooleanField(default=True) class Meta: ordering = ('priority', 'tag') def __str__(self): return self.tag.displayable_name
class Experience(models.Model): company = models.TextField() company_small_logo = models.ImageField(blank=True, null=True, default=None) company_link = models.URLField(blank=True, null=True, default=None) month_start = models.PositiveSmallIntegerField() year_start = models.PositiveSmallIntegerField() is_current_job = models.BooleanField(default=False) month_end = models.PositiveSmallIntegerField(blank=True, null=True, default=None) year_end = models.PositiveSmallIntegerField(blank=True, null=True, default=None) title = models.TextField() description = tinymce.models.HTMLField() location = models.TextField() tags = models.ManyToManyField('tags.Tag', null=True) class Meta: ordering = ('-year_start', ) def month_year_range_str(self): range = "{month_start:0>2d}/{year_start} - ".format( month_start=self.month_start, year_start=self.year_start) if self.is_current_job: range += "Present" else: range += "{month_end:0>2d}/{year_end}".format( month_end=self.month_end, year_end=self.year_end) return range month_year_range_str.short_description = "Dates" # This is so the admin page has correct column header def __str__(self): return "{range} | {company} | {title}".format( range=self.month_year_range_str(), company=self.company, title=self.title)
class Project(models.Model): year_start = models.PositiveSmallIntegerField() year_end = models.PositiveSmallIntegerField(blank=True, null=True, default=None) is_wip = models.BooleanField() git_url = models.URLField(blank=True, null=True, default=None) title = models.TextField() title_slug = models.SlugField() # This is the full project page content full_content = tinymce.models.HTMLField() # This is the condensed version for the resume page resume_content = tinymce.models.HTMLField() project_logo = models.ImageField(blank=True, null=True, default=None) tags = models.ManyToManyField('tags.Tag', null=True) class Meta: ordering = ('-year_start', ) def __str__(self): return "{year} - {title}".format(year=self.year_start, title=self.title) def get_date_range_str(self): range = "{year_start} - ".format(year_start=self.year_start) if self.is_wip: range += "Present" else: range += "{year_end}".format(year_end=self.year_end) return range
class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ("useraccounts", "0001_initial"), ] operations = [ migrations.CreateModel( name="Attributes", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=200)), ("is_number", models.BooleanField(default=True)), ("is_string", models.BooleanField(default=False)), ], options={"verbose_name_plural": "Attributes"}, ), migrations.CreateModel( name="Category", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ("lft", models.PositiveIntegerField(editable=False)), ("rght", models.PositiveIntegerField(editable=False)), ( "tree_id", models.PositiveIntegerField(db_index=True, editable=False), ), ("level", models.PositiveIntegerField(editable=False)), ( "parent", mptt.fields.TreeForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="children", to="catalog.Category", ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="ChangeRequest", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("purchase_order_of_session", models.IntegerField()), ("previous_total", models.IntegerField()), ("new_total", models.IntegerField()), ("description", models.CharField(max_length=100)), ("initiator", models.CharField(max_length=50)), ("initiation_date", models.DateField(auto_now_add=True)), ], ), migrations.CreateModel( name="FinancialSession", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("session_start_date", models.DateField()), ("session_end_date", models.DateField()), ], ), migrations.CreateModel( name="HeaderFooter", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("header", tinymce.models.HTMLField()), ("footer", tinymce.models.HTMLField()), ("is_active", models.BooleanField(default=False)), ], options={"verbose_name_plural": "Header and Footer"}, ), migrations.CreateModel( name="ModeOfPayment", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("method", models.CharField(max_length=25)), ], options={"verbose_name_plural": "Modes of payment"}, ), migrations.CreateModel( name="NonPaymentOrder", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "reference", models.CharField(max_length=200, verbose_name="Letter No."), ), ( "reference_date", models.DateField(verbose_name="Letter Date"), ), ("date", models.DateField(auto_now_add=True)), ( "delivery_address", models.CharField( blank=True, max_length=500, null=True, verbose_name="Site", ), ), ("item_type", models.CharField(max_length=200)), ( "buyer", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name="Client", ), ), ], ), migrations.CreateModel( name="Product", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=500)), ("price_per_unit", models.IntegerField(blank=True, null=True)), ( "category", mptt.fields.TreeForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="products", to="catalog.Category", ), ), ( "organisation", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="useraccounts.AdminOrganisations", ), ), ], ), migrations.CreateModel( name="PurchaseOrder", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "is_debit", models.BooleanField(default=False, verbose_name="Non-Payment Job"), ), ( "reference", models.CharField(max_length=200, verbose_name="Letter No."), ), ( "reference_date", models.DateField(blank=True, null=True, verbose_name="Letter Date"), ), ( "delivery_address", models.CharField( blank=True, max_length=500, null=True, verbose_name="Site", ), ), ("date_time", models.DateField(auto_now_add=True)), ("purchase_order_time", models.TimeField(auto_now_add=True)), ("total_discount", models.IntegerField(default=0)), ("tds", models.IntegerField(default=0)), ( "cheque_dd_number", models.CharField(blank=True, max_length=50), ), ( "cheque_dd_date", models.DateField(blank=True, max_length=50, null=True), ), ("is_active", models.BooleanField(default=True)), ( "buyer", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name="Client", ), ), ( "mode_of_payment", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.ModeOfPayment", ), ), ( "organisation", models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="useraccounts.AdminOrganisations", ), ), ( "type_of_service", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="useraccounts.OrganisationType", ), ), ], ), migrations.CreateModel( name="Surcharge", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("tax_name", models.CharField(max_length=200)), ("value", models.FloatField()), ("taxes_included", models.BooleanField(default=False)), ("tax_effected_from", models.DateField(null=True)), ("tax_valid_till", models.DateField(null=True)), ("Remark", models.CharField(max_length=1000, null=True)), ], ), migrations.CreateModel( name="Unit", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("unit", models.CharField(max_length=100)), ], ), migrations.CreateModel( name="TaxesApplied", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("surcharge_name", models.CharField(max_length=500)), ("surcharge_value", models.FloatField()), ("tax", models.IntegerField()), ( "purchase_order", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.PurchaseOrder", ), ), ( "surcharge", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Surcharge", ), ), ], ), migrations.CreateModel( name="SurchargePaid", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("value", models.IntegerField()), ("date", models.DateField(auto_now_add=True)), ( "surcharge", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Surcharge", ), ), ], ), migrations.CreateModel( name="SpecialCategories", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("voucher", models.BooleanField(default=False)), ("tax", models.BooleanField(default=False)), ( "category", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Category", ), ), ], ), migrations.CreateModel( name="RequestSurchargeChange", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("previous_value", models.IntegerField()), ("new_value", models.IntegerField()), ( "change_request", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.ChangeRequest", ), ), ( "surcharge", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.TaxesApplied", ), ), ], ), migrations.CreateModel( name="RequestStatus", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("confirmed", models.BooleanField(default=False)), ("cancelled", models.BooleanField(default=False)), ("request_response", models.DateField(null=True)), ( "change_request", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.ChangeRequest", ), ), ], ), migrations.CreateModel( name="PurchasedItem", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("price_per_unit", models.IntegerField()), ("qty", models.IntegerField(verbose_name="Quantity")), ("price", models.IntegerField()), ( "item", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Product", ), ), ( "purchase_order", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.PurchaseOrder", ), ), ], options={ "verbose_name": "Tests", "verbose_name_plural": "Tests" }, ), migrations.CreateModel( name="NonPaymentOrderOfSession", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("non_payment_order_of_session", models.IntegerField()), ( "non_payment_order", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.NonPaymentOrder", ), ), ( "session", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.FinancialSession", ), ), ], ), migrations.CreateModel( name="mCategory", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ( "parent", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="catalog.mCategory", ), ), ], options={"verbose_name_plural": "Categories"}, ), migrations.AddField( model_name="changerequest", name="session", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.FinancialSession", ), ), migrations.AddField( model_name="category", name="unit", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="catalog.Unit", ), ), migrations.CreateModel( name="Catalog", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("value", models.CharField(max_length=200)), ( "attribute", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Attributes", ), ), ( "product", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.Product", ), ), ], ), migrations.CreateModel( name="Bill", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("delivery_charges", models.IntegerField()), ("total_cost", models.IntegerField()), ("totalplusdelivery", models.IntegerField()), ("total_tax", models.IntegerField()), ("grand_total", models.IntegerField()), ("amount_received", models.IntegerField()), ( "purchase_order", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="catalog.PurchaseOrder", ), ), ], ), ]
class Migration(migrations.Migration): initial = True dependencies = [ ("accounts", "0001_initial"), ] operations = [ migrations.CreateModel( name="Category", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("title", models.CharField(max_length=50, verbose_name="Title")), ], options={ "verbose_name": "Category", "verbose_name_plural": "Categories", }, ), migrations.CreateModel( name="Newsletter", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("email", models.EmailField(max_length=254, verbose_name="Email")), ( "timestamp", models.DateTimeField(auto_now=True, verbose_name="Timestamp"), ), ], options={ "verbose_name": "newsletter", "verbose_name_plural": "newsletters", }, ), migrations.CreateModel( name="Post", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("title", models.CharField(max_length=100, verbose_name="Title")), ("overview", models.TextField(default="", verbose_name="Overview")), ( "timestamp", models.DateTimeField(auto_now=True, verbose_name="Timestamp"), ), ("content", tinymce.models.HTMLField(default="<p>Hello World</p>")), ( "featured", models.BooleanField(default=False, verbose_name="Featured"), ), ( "thumbnail", models.ImageField( blank=True, default="testing.jpeg", upload_to="thumbnail", verbose_name="Thumbnail", ), ), ("slug", models.SlugField(blank=True, null=True, verbose_name="Slug")), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="accounts.author", verbose_name="Author", ), ), ( "category", models.ManyToManyField(related_name="post", to="blog.Category", verbose_name="Category"), ), ], options={ "verbose_name": "Post", "verbose_name_plural": "Posts", }, ), migrations.CreateModel( name="Comment", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "timestamp", models.DateTimeField(auto_now=True, verbose_name="Timestamp"), ), ("content", models.TextField(verbose_name="Content")), ( "post", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="comment", to="blog.post", verbose_name="post", ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="accounts.author", verbose_name="user", ), ), ], options={ "verbose_name": "comment", "verbose_name_plural": "comments", }, ), ]
class Migration(migrations.Migration): dependencies = [] operations = [ migrations.CreateModel( name='Goods', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('name', models.CharField(verbose_name='商品SPU名称', max_length=20)), ('detail', tinymce.models.HTMLField(verbose_name='商品详情', blank=True)), ], options={ 'verbose_name': '商品SPU', 'db_table': 'df_goods', 'verbose_name_plural': '商品SPU', }, ), migrations.CreateModel( name='GoodsImage', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('image', models.ImageField(verbose_name='图片路径', upload_to='goods')), ], options={ 'verbose_name': '商品图片', 'db_table': 'df_goods_image', 'verbose_name_plural': '商品图片', }, ), migrations.CreateModel( name='GoodsSKU', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('name', models.CharField(verbose_name='商品名称', max_length=20)), ('desc', models.CharField(verbose_name='商品简介', max_length=256)), ('price', models.DecimalField(verbose_name='商品价格', max_digits=10, decimal_places=2)), ('unite', models.CharField(verbose_name='商品单位', max_length=20)), ('image', models.ImageField(verbose_name='商品图片', upload_to='goods')), ('stock', models.IntegerField(verbose_name='商品库存', default=1)), ('sales', models.IntegerField(verbose_name='商品销量', default=0)), ('status', models.SmallIntegerField(verbose_name='商品状态', default=1, choices=[(0, '下线'), (1, '上线')])), ('goods', models.ForeignKey(verbose_name='商品SPU', on_delete=django.db.models.deletion.CASCADE, to='goods.Goods')), ], options={ 'verbose_name': '商品', 'db_table': 'df_goods_sku', 'verbose_name_plural': '商品', }, ), migrations.CreateModel( name='GoodsType', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('name', models.CharField(verbose_name='种类名称', max_length=20)), ('logo', models.CharField(verbose_name='标识', max_length=20)), ('image', models.ImageField(verbose_name='商品类型图片', upload_to='type')), ], options={ 'verbose_name': '商品种类', 'db_table': 'df_goods_type', 'verbose_name_plural': '商品种类', }, ), migrations.CreateModel( name='IndexGoodsBanner', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('image', models.ImageField(verbose_name='图片', upload_to='banner')), ('index', models.SmallIntegerField(verbose_name='展示顺序', default=0)), ('sku', models.ForeignKey(verbose_name='商品', on_delete=django.db.models.deletion.CASCADE, to='goods.GoodsSKU')), ], options={ 'verbose_name': '首页轮播商品', 'db_table': 'df_index_banner', 'verbose_name_plural': '首页轮播商品', }, ), migrations.CreateModel( name='IndexPromotionBanner', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('name', models.CharField(verbose_name='活动名称', max_length=20)), ('url', models.URLField(verbose_name='活动链接')), ('image', models.ImageField(verbose_name='活动图片', upload_to='banner')), ('index', models.SmallIntegerField(verbose_name='展示顺序', default=0)), ], options={ 'verbose_name': '主页促销活动', 'db_table': 'df_index_promotion', 'verbose_name_plural': '主页促销活动', }, ), migrations.CreateModel( name='IndexTypeGoodsBanner', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), ('create_time', models.DateTimeField(verbose_name='创建时间', auto_now_add=True)), ('update_time', models.DateTimeField(verbose_name='更新时间', auto_now=True)), ('is_delete', models.BooleanField(verbose_name='删除标记', default=False)), ('display_type', models.SmallIntegerField(verbose_name='展示类型', default=1, choices=[(0, '标题'), (1, '图片')])), ('index', models.SmallIntegerField(verbose_name='展示顺序', default=0)), ('sku', models.ForeignKey(verbose_name='商品SKU', on_delete=django.db.models.deletion.CASCADE, to='goods.GoodsSKU')), ('type', models.ForeignKey(verbose_name='商品类型', on_delete=django.db.models.deletion.CASCADE, to='goods.GoodsType')), ], options={ 'verbose_name': '主页分类展示商品', 'db_table': 'df_index_type_goods', 'verbose_name_plural': '主页分类展示商品', }, ), migrations.AddField( model_name='goodssku', name='type', field=models.ForeignKey( verbose_name='商品种类', on_delete=django.db.models.deletion.CASCADE, to='goods.GoodsType'), ), migrations.AddField( model_name='goodsimage', name='sku', field=models.ForeignKey( verbose_name='商品', on_delete=django.db.models.deletion.CASCADE, to='goods.GoodsSKU'), ), ]