亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python Django 使用錯誤的查詢

Python Django 使用錯誤的查詢

猛跑小豬 2023-07-11 15:28:46
我有一個問題,為了解決它,我嘗試進入 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.idThe 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。希望你能幫助我謝謝!
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

如果您自己沒有指定主鍵,?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 key


class 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 key


class 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。


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號