Python Django 使用错误的查询

我有一个问题,为了解决它,我尝试进入 shell,但我找不到解决方案,所以我希望你能帮助我。我正在导入包含 id 和图像 URL 的模型图像,但由于此错误我无法获取它。代码:


from recipes_database.models import Images 

Images.objects.all()

这里是错误:


Traceback (most recent call last):   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute

    return self.cursor.execute(sql, params)   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 413, in execute

    return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: no such column: Images.id


The above exception was the direct cause of the following exception:


Traceback (most recent call last):   File "<console>", line 1, in <module>   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 263, in __repr__

    data = list(self[:REPR_OUTPUT_SIZE + 1])   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 269, in __len__

    self._fetch_all()   File "F:\Developement\Projects\WhatToCookWeb\venv\lib\site-packages\django\db\models\query.py", line 1303, in _fetch_all但是当我对其他模型做同样的事情时,它起作用了,我想知道这次有什么不同。这是我的图像模型:


class Images(models.Model):

    # Field name made lowercase.

    rezept_id = models.ForeignKey(

        'Rezepte', models.DO_NOTHING, db_column='Rezept_ID', blank=True, null=True)

    # Field name made lowercase.

    image_url = models.CharField(

        db_column='Image_URL', blank=True, null=True, max_length=1000)


    class Meta:

        managed = False

        db_table = 'Images'

我认为 Django 以某种方式使用了错误的查询,因为没有 Images.id,只有 Images.recipe_id。希望你能帮助我谢谢!


猛跑小猪
浏览 123回答 1
1回答

吃鸡游戏

如果您自己没有指定主键, Django会自动添加主键。事实上,正如文档所说:默认情况下,Django 为每个模型提供以下字段:id = models.AutoField(primary_key=True)这是一个自动递增的主键。如果您想指定自定义主键,请在您的字段之一上指定 。primary_key=True如果 Django 发现您已显式设置Field.primary_key,它不会添加自动 id 列。在你的模型中,你没有设置主键,所以Django会自动添加一个额外的字段id,这也将在查询中使用。例如,如果image_url是主键,您可以将其指定为:# image_url is the primary keyclass Images(models.Model):    # Field name made lowercase.    rezept = models.ForeignKey(        'Rezepte',        models.DO_NOTHING,        db_column='Rezept_ID',        blank=True,        null=True    )    # Field name made lowercase.    image_url = models.CharField(        db_column='Image_URL',        blank=True,        null=True,        max_length=1000,        primary_key=True    )    class Meta:        managed = False        db_table = 'Images'如果 therezept是主键,那么它也意味着它是唯一的,在这种情况下,将其设为OneToOneField[Django-doc]更有意义,因为它具有ForeignKey唯一性约束,而且它还有一些含义的逆向关系:# rezept is the primary keyclass Images(models.Model):    # Field name made lowercase.    rezept = models.OneToOneField(        'Rezepte',        db_column='Rezept_ID',        primary_key=True    )    # Field name made lowercase.    image_url = models.CharField(        db_column='Image_URL',        blank=True,        null=True,        max_length=1000    )    class Meta:        managed = False        db_table = 'Images'注意:通常不会_id向ForeignKey字段添加后缀,因为 Django 会自动添加一个带有_id后缀的“孪生”字段。因此应该是rezept,而不是rezept_id。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python