首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的多对多关系"ProgrammingError: shoe_size_run.id不存在“

Django中的多对多关系"ProgrammingError: shoe_size_run.id不存在“
EN

Stack Overflow用户
提问于 2016-05-12 10:27:45
回答 2查看 416关注 0票数 0

我通过内省现有的数据库,使用inspectdb工具创建模型。

部分ERD:

models.py:

代码语言:javascript
复制
class Shoe(models.Model):
    sku = models.AutoField(primary_key=True)
    style_number = models.CharField(unique=True, max_length=6)
    factory_style_number = models.CharField(unique=True, max_length=10, blank=True, null=True)
    stock_name = models.CharField(max_length=10)
    season = models.CharField(max_length=30)
    date_created = models.DateField()
    category_code = models.ForeignKey(Category, models.DO_NOTHING, db_column='category_code')
    brand_code = models.ForeignKey(Brand, models.DO_NOTHING, db_column='brand_code')
    factory_number = models.ForeignKey(Factory, models.DO_NOTHING, db_column='factory_number')
    spec_sheet = models.ForeignKey('SpecSheet', models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'shoe'

class ShoeSizeRun(models.Model):
    sku = models.ForeignKey(Shoe, models.DO_NOTHING, db_column='sku')
    size_run = models.ForeignKey('SizeRun', models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'shoe_size_run'
        unique_together = (('sku', 'size_run'),)

class SizeRun(models.Model):
    size_run_id = models.AutoField(primary_key=True)
    run = models.IntegerField()
    width = models.CharField(max_length=4)
    pairs_of_five = models.IntegerField(blank=True, null=True)
    pairs_of_five_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_six = models.IntegerField(blank=True, null=True)
    pairs_of_six_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_seven = models.IntegerField(blank=True, null=True)
    pairs_of_seven_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_eight = models.IntegerField(blank=True, null=True)
    pairs_of_eight_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_nine = models.IntegerField(blank=True, null=True)
    pairs_of_nine_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_ten = models.IntegerField(blank=True, null=True)
    pairs_of_ten_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_eleven = models.IntegerField(blank=True, null=True)
    pairs_of_eleven_and_half = models.IntegerField(blank=True, null=True)
    pairs_of_twelve = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'size_run'`

这些是这些表的sql定义:

代码语言:javascript
复制
CREATE TABLE shoe (
  sku                  SERIAL NOT NULL, 
  style_number    varchar(6) NOT NULL UNIQUE, 
  factory_style_number varchar(10) UNIQUE, 
  stock_name      varchar(10) NOT NULL, 
  season               varchar(30) NOT NULL, 
  date_created         date NOT NULL, 
  category_code        int4 NOT NULL, 
  brand_code           int4 NOT NULL, 
  factory_number       int4 NOT NULL, 
  spec_sheet_id        int4, 
  PRIMARY KEY (sku));
CREATE TABLE shoe_size_run (
  sku         int4 NOT NULL, 
  size_run_id int4 NOT NULL, 
  PRIMARY KEY (sku, 
  size_run_id));
CREATE TABLE size_run (
  size_run_id              SERIAL NOT NULL, 
  run                      int4 NOT NULL, 
  width                    varchar(4) NOT NULL, 
  pairs_of_five            int4, 
  pairs_of_five_and_half   int4, 
  pairs_of_six             int4, 
  pairs_of_six_and_half    int4, 
  pairs_of_seven           int4, 
  pairs_of_seven_and_half  int4, 
  pairs_of_eight           int4, 
  pairs_of_eight_and_half  int4, 
  pairs_of_nine            int4, 
  pairs_of_nine_and_half   int4, 
  pairs_of_ten             int4, 
  pairs_of_ten_and_half    int4, 
  pairs_of_eleven          int4, 
  pairs_of_eleven_and_half int4, 
  pairs_of_twelve          int4, 
  PRIMARY KEY (size_run_id));
ALTER TABLE shoe_size_run ADD CONSTRAINT FKshoe_size_544815 FOREIGN KEY (sku) REFERENCES shoe (sku);
ALTER TABLE shoe_size_run ADD CONSTRAINT FKshoe_size_544404 FOREIGN KEY (size_run_id) REFERENCES size_run (size_run_id);

现在,我在Django中使用多到多个表有问题。为什么会有这个错误?

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-12 11:07:19

您的表shoe_size_run有一个复合主键(sku, size_run_id)。不幸的是,Django还不支持这一点(参见票证373)

如果要在Django中使用该表,则必须向该表添加一个列主键。最简单的列名是id,因为默认情况下,这正是Django所期望的。

查看您的图表,您还需要对您的shoe_image表执行同样的操作。

票数 1
EN

Stack Overflow用户

发布于 2016-05-12 10:45:34

表为shoe_size_run,列为size_run_id。因此,您的模型字段需要是size_run_id而不是size_run

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37184214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档