Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么django inspectdb跳过一些ID?_Django - Fatal编程技术网

为什么django inspectdb跳过一些ID?

为什么django inspectdb跳过一些ID?,django,Django,我正在我的模式上运行inspectdb。首先,这些定义非常正确,如下所示: class Diagnosis(models.Model): id = models.BigIntegerField(primary_key=True) code = models.CharField(max_length=255) starting_node = models.ForeignKey('Node', models.DO_NOTHING, blank=True, null=True)

我正在我的模式上运行inspectdb。首先,这些定义非常正确,如下所示:

class Diagnosis(models.Model):
    id = models.BigIntegerField(primary_key=True)
    code = models.CharField(max_length=255)
    starting_node = models.ForeignKey('Node', models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'diagnosis'


class DiagnosisTranslation(models.Model):
    id = models.IntegerField(primary_key=True)
    language = models.CharField(max_length=10)
    title = models.CharField(max_length=255, blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    diagnosis = models.ForeignKey(Diagnosis, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'diagnosis_translation'
然后,我为ID添加了序列和默认值(postgresql):

我再次运行了
python manage.py inspect
,结果在诊断时正确更改,但在另一个表中没有,它现在缺少id属性:

class Diagnosis(models.Model):
    id = models.BigAutoField(primary_key=True)
    code = models.CharField(max_length=255)
    starting_node = models.ForeignKey('Node', models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'diagnosis'

class DiagnosisTranslation(models.Model):
    # Where's the ID ??
    language = models.CharField(max_length=10)
    title = models.CharField(max_length=255, blank=True, null=True)
    description = models.TextField(blank=True, null=True)
    diagnosis = models.ForeignKey(Diagnosis, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'diagnosis_translation'

为什么Django忽略了某些表的ID而不是其他表的ID?尤其是为什么只有当我使id字段自动递增时才会发生这种情况?

如果您没有明确定义主键。德扬戈。因此,在这种情况下,会隐式添加一个字段:

id=models.AutoField(主键=True)
因此,Django将省略显式指定主键:

  • 主键的名称为
    id
    ;及
  • 主键具有as类型(an是一个根据可用ID自动递增的
    整型字段

  • 谢谢,这就解释了一切!
    class Diagnosis(models.Model):
        id = models.BigAutoField(primary_key=True)
        code = models.CharField(max_length=255)
        starting_node = models.ForeignKey('Node', models.DO_NOTHING, blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'diagnosis'
    
    class DiagnosisTranslation(models.Model):
        # Where's the ID ??
        language = models.CharField(max_length=10)
        title = models.CharField(max_length=255, blank=True, null=True)
        description = models.TextField(blank=True, null=True)
        diagnosis = models.ForeignKey(Diagnosis, models.DO_NOTHING, blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'diagnosis_translation'
    
    id = models.AutoField(primary_key=True)