2014-07-14 137 views
0

重複的模型字段給我帶來了麻煩(當我運行我的網頁時沒有這樣的表appname_modelname)。每當我做./manage.py遷移應用程序名,它給了我「重複的領域」。我檢查了我的models.py,其中只有一個。如何刪除該重複字段?看起來不管我做什麼,它都保持着。我已經試過:Django中的重複模型字段

  • 刪除數據庫

  • 刪除遷移文件夾中的app文件夾

  • 南做./manage.py sqlclear然後丟棄south_migrationhistory表中dbshel​​l

  • ./manage.py schemamigration appname --initial,./manage.py migrate appname --fake

我已經用完了想法。

class Document(models.Model): 
    filename = models.CharField(max_length=255, blank=True, null=True, default=None) 
    identity = models.CharField(max_length=255, default=None, null=True) 
    user = models.ForeignKey(User, null=False) 
    user_id = models.IntegerField(User, null=True) 
    docfile = models.FileField(upload_to=_upload_path, storage=fs) # upload_to is a path inside the storage path 

    def get_upload_path(self,filename): 
     return str(self.user.id) + '/' + str(date.today()) + '/' + filename 
+0

請張貼出現重複字段錯誤的模型 – Pawan

+0

好的我編輯了我的OP。重複是user_id – KSHMR

+0

爲什麼user_id似乎是必要的? user和user_id都是相同的字段。 – Pawan

回答

-1

不知道,但問題造成這裏在這兩個線

user = models.ForeignKey(User, null=False) 
user_id = models.IntegerField(User, null=True) 

最好使用「相關名稱」屬性,以避免重複的錯誤,如數據庫「用戶」將被添加爲USER_ID。

user = models.ForeignKey(User, related_name="id_user") # Change the related field as your convenience 
user_id = models.IntegerField(null=True, related_name="user_id") 

檢查是否可以解決您的問題

5

你不能做到這一點,您的用戶外鍵,Django的ORM將創建一個名爲user_id數據庫字段使用(你的外鍵字段名加_id)它作爲數據庫中的FK。

即使您需要,您也不需要自己創建該字段(ORM將小心),請更改屬性useruser_id的名稱。

the documentation

在幕後,Django的追加 「_id」 字段名來創建其數據庫列名。在上面的例子中,Car模型的數據庫表將有一個manufacturer_id列。 (您可以通過指定db_column來明確地更改它)但是,除非您編寫自定義SQL,否則您的代碼不應該處理數據庫列名稱。您將始終處理模型對象的字段名稱。