簡體   English   中英

MySQL使用Django的自動ID給出“字段列表中的未知列'user.id'”錯誤

[英]MySQL gives an “Unknown column 'user.id' in 'field list'” error using Django's automatic id

我的User模型沒有主鍵,因此將使用自動id 但是,當我嘗試通過外鍵引用它時,使用Django的“ _set ”表示法訪問它時:

def postDetails(request, pk)
    post = Post.objects.get(pk=pk)
    if post.user_set.all(): # Errors on this line
        [...]

我從MySQL得到一個錯誤:

/ webApp / postDetail / 42 /中的OperationalError(1054,“字段列表”中的未知列“ user.id”)

我究竟做錯了什么? 我應該以其他方式訪問它嗎? 自動ID是否有限制?

型號參考:

class Post(models.Model):
    name = models.CharField(max_length=128)
    blog = models.ForeignKey('Blog')
    active = models.BooleanField(blank=True)
    created_date = models.DateTimeField()
    class Meta:
        managed = False
        db_table = 'post'
    def __unicode__(self):
        return self.name

class User(models.Model):
    level = models.ForeignKey(Level)
    post = models.ForeignKey(Post)
    name = models.CharField(max_length=64)
    note = models.CharField(max_length=4096)
    active = models.BooleanField(blank=True, default=True)
    class Meta:
        managed = False
        db_table = 'user'

我想包括的其他內容:在運行此程序之前,我確實運行過syncdb

編輯 :錯誤的答案。 檢查下面的評論

問題在於您已managed將其設置為False 根據文檔

如果為False,則不會對此模型執行數據庫表創建或刪除操作。 如果模型表示通過其他某種方式創建的現有表或數據庫視圖,則此功能很有用。 當managed = False時,這是唯一的區別。 模型處理的所有其他方面與正常情況完全相同。 這包括

如果不聲明,則將自動主鍵字段添加到模型中。 為避免對以后的代碼閱讀器造成混淆,建議在使用非托管模型時從正在建模的數據庫表中指定所有列。

您將需要定義primary key因為默認情況下不再這樣做。

不能100%確定,但是我認為即使Django會將id字段添加到模型類中,該字段也不會通過syncdb傳播到數據庫。

一種嘗試的方法是重命名現有的User表,運行syncdb並查看是否創建了User表。 如果不是(可能是由於托管標志),請使用managed = True重試。 如果在這種情況下出現id字段,那么我的猜測是您必須使用與自動創建的參數相同的參數將其手動添加到User表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM