0

重复的模型字段给我带来了麻烦(运行网页时没有这样的表 appname_modelname)。每当我执行 ./manage.py migrate appname 时,它​​都会给我“重复字段”。我检查了我的models.py,那里只有一个。如何删除该重复字段?似乎无论我做什么,它都会留下来。我试过了:

  • 删除数据库

  • 删除应用程序文件夹中的迁移文件夹

  • 执行 ./manage.py sqlclear south,然后在 dbshel​​l 中删除 south_migrationhistory 表

  • ./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
4

2 回答 2

5

您不能这样做,对于您的用户外键,Django ORM 将创建一个名为user_id(您的外键字段名称加上_id)的数据库字段,以将其用作数据库中的 FK。

您不必自己创建此字段(ORM 会处理),即使您需要它,也可以更改属性的名称useruser_id.

文档中

在幕后,Django 将“_id”附加到字段名称以创建其数据库列名称。在上面的示例中,Car 模型的数据库表将有一个manufacturer_id列。(您可以通过指定显式更改它db_column)但是,您的代码永远不必处理数据库列名,除非您编写自定义 SQL。您将始终处理模型对象的字段名称。

于 2014-07-15T08:39:44.997 回答
-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")

检查这是否能解决您的问题

于 2014-07-14T13:33:43.290 回答