2017-10-06 116 views
0

我在模型中添加了一個字段,並通過foreignkey將其附加到django用戶模型中。auth.user未解決錯誤django

我的模式是:

from django.db import models 
from django.contrib.auth.models import User 

    # Create your models here. 
    class user_files(models.Model): 
     Filename = models.CharField(max_length=50) 
     Browse = models.FileField() 
     Username = models.ForeignKey(User,default=1) 

,但在遷移時它給我的錯誤是:

'valuerror: related model 'auth.user' cannot be resolved.'

這是什麼意思,如何解決?我嘗試了很多東西,但沒有奏效。

在此先感謝。

+1

該錯誤不是來自此代碼。 –

+0

[Django migrations.AddField中外鍵的默認值]的可能重複(https://stackoverflow.com/questions/36280253/default-value-for-foreign-key-in-django-migrations-addfield) –

+1

首次運行makemigration和migrate命令,在models.py中沒有任何字段,然後在將某些內容放置在models.py中後再次運行這些命令。 – amrit

回答

0

您的代碼給人的印象是,除了發生的錯誤之外,您需要更多的幫助。這裏是我的建議,就如何提高你的代碼一般:

  • 建設關係到用戶模型的推薦方法是使用設置AUTH_USER_MODEL。

  • 類名應按pascal案例(PascalCase)和單數形式約定。

  • 在蛇情況下(snake_case),變量名應該按照約定俗成。

因此您的代碼可以增強這樣的:

from django.conf import settings 
from django.db import models 


class UserFile(models.Model): 
    filename = models.CharField(max_length=50) 
    browse = models.FileField() 
    username = models.ForeignKey(settings.AUTH_USER_MODEL) 

命名是一個極端重要的課題。你應該命名你的類,方法,屬性非常有意義。對於外鍵字段使用username不是很具描述性。該變量不包含用戶名的值,而是整個User對象。有一個字段filename也非常令人困惑,因爲FileField實際上將文件路徑以及文件名作爲字符串(varchar)保存在數據庫中。

代碼被寫入一次,但多次讀取。讀者不清楚你的意圖。

如果在遷移此模型後添加字段username,則需要前兩個變體:必需字段或可選字段。

如果它應該是一個可選字段,可以讓NULL

username = models.ForeignKey(settings.AUTH_USER_MODEL, null=True) 

然後運行:

python manage.py makemigrations 
python manage.py migrate 

這是更簡單的方法。但是,如果此字段是必需的,則遷移需要知道應將哪個值分配給表中的當前條目,並會交互式地要求您添加默認值。這與指定默認值作爲選項不同。

在你的情況下,它意味着未明確指定用戶名的所有未來條目將具有值1.你真的想要嗎?你確定用戶在表中有這個主鍵的條目嗎?

EDIT(2017年10月10日):

如果你已經與遷移混亂,你可以手動清理。在數據庫中有一個表django_migrations,它跟蹤所有應用的遷移。它有四列:

----------------------------- 
| id | app | name | applied | 
----------------------------- 

如果你使用MySQL,你可以檢查遷移與命令你的應用程序:

SELECT * FROM django_migrations WHERE app = 'your_app'; 

刪除該表中的條目和文件的migrations目錄的你應用程序,這是造成問題。然後重新開始。

+0

HI SIR, 我刪除了模型中的所有條目,並從模型中刪除了foreignkey列。但是現在在遷移它時說沒有檢測到變化,並且在本地主機上運行時,它會將錯誤報告爲'沒有這樣的列:Box_user_files.Username_id' –

+0

請參閱我關於遷移的編輯。 – cezar