2014-07-14 69 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,否则您的代码不应该处理数据库列名称。您将始终处理模型对象的字段名称。