Django Postgres迁移模型列discount.category_name_id不存在

时间:2018-10-16 08:17:21

标签: python django postgresql orm migrate

嗨,我正在尝试将Django后端和postgresql数据库组合在一起。

这是我的数据库表:

tables

我在Django中的models.py

from django.db import models

# Create your models here.
class Categories(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.TextField(null=True, unique=True)

    class Meta:
        db_table = 'categories'

    def __str__(self):
        return self.name
class Website(models.Model):
    id = models.IntegerField(primary_key=True)
    site = models.TextField(null=True, unique=True)

    class Meta:
        db_table= 'website'

    def __str__(self):
        return self.site

class Discount(models.Model):
    id = models.IntegerField(primary_key=True)
    product_name = models.TextField()
    product_price = models.TextField()
    product_old_price = models.TextField()
    product_link = models.TextField()
    category_name = models.ForeignKey(Categories, on_delete=models.CASCADE, null=True, to_field='name')
    product_site = models.ForeignKey(Website, on_delete=models.CASCADE, null=True, to_field='site')
    product_image = models.TextField()
    class Meta:
        db_table = 'discount'

    def __str__(self):
            return self.product_name

在下面的教程中,我设法将Django和postgresql链接在一起,但是当我第一次尝试迁移数据库时,就出现了此错误:

  

列折扣.category_name_id不存在第1行:   ...“。” product_old_price“,”折扣“。” product_link“,”折扣“ ...                                                                ^提示:也许您打算引用“ discount.category_name”列。

我虽然将我的外键从Discount.category_name链接到Categories.name,并且在ForeignKeyField中使用to_field ='name',但是以某种方式使用了Discount.category_name_id?我不知道category_name_id在哪里,它不在我的表中

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

以下字段未反映在数据库中,请检查数据库字段名称(如果没有),然后创建一个虚拟迁移并为此编写脚本

    category_name = models.ForeignKey(Categories, on_delete=models.CASCADE, null=True, to_field='name')

答案 1 :(得分:0)

我设法通过添加

对其进行了修复
  

db_column ='类别名称'

到ForeignKey字段

似乎我需要在ORM的Postgresql表中具体说明实际上是外键的列

category_name = models.ForeignKey(Categories, on_delete=models.CASCADE, null=True, to_field='name', db_column='category_name')
    product_site = models.ForeignKey(Website, on_delete=models.CASCADE, null=True, to_field='site', db_column='product_site')