【问题标题】:Duplicate model field in DjangoDjango中的重复模型字段
【发布时间】:2014-09-04 07:18:41
【问题描述】:

重复的模型字段给我带来了麻烦(运行网页时没有这样的表 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

【问题讨论】:

  • 请发布出现重复字段错误的模型
  • 好的,我已经编辑了我的 OP。重复的是 user_id
  • 为什么 user_id 似乎是必要的? user 和 user_id 都是同一个字段。
  • 如果我很久以前没有,我会收到一个错误,说这个字段丢失了。我发现这很奇怪,但我放弃了调试它,因为我找不到错误。
  • 只保留一个字段 user = models.ForeignKey(User)..

标签: python django django-migrations


【解决方案1】:

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

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

来自the documentation

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

【讨论】:

    【解决方案2】:

    不确定,但在这两行中引起了问题

    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")
    

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

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2012-10-22
      • 1970-01-01
      • 2012-09-15
      • 2019-06-30
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多