Django queryset ProgrammingError:列不存在

时间:2018-02-19 19:19:33

标签: django django-models

我正面临着django的一个大问题。

我正在尝试保存包含foreignKeys和'ManyToMany`的对象,但我总是收到此错误

ProgrammingError: column [columnName] does not exist

我已经做过几次所有迁移,但它不起作用。当我使用不包含外键的模型时,我没有问题。我试图删除迁移文件夹。我的数据库似乎不想更新字段。我需要强制它创建这些列,但我不知道。

      class Post(models.Model):
post_id = models.CharField(max_length=100,default="")
title = models.CharField(max_length=100,default="")
content = models.TextField(default="")
author = models.ForeignKey(Users, default=None, on_delete=models.CASCADE)
comments = models.ManyToManyField(Replies)
numberComments = models.IntegerField(default=0)
date = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(null=True)



def __str__(self):
    return self.post_id

当我试图检索这个时,我有:

ProgrammingError: column numberComments does not exist

正如我在提出makemigrationsmigrate之前所说,我甚至删除了迁移文件夹。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

要使用外键保存POST模型的实例,您需要插入查询对象。 代码示例:

user = Users.objects.get(pk = 1)

p = POST(
   title = 'Hello',
   ...
   author = user,
   date = '2018-01-01'
)
p.save()

您不需要创建post_id列,django会自动为您创建一个,您可以使用.pk或.id访问它 你既不需要numberComments。你应该从评论中计算出多对多的关系。嗯......你也可以在DB上使用它。

接下来,您无法在创建时添加多对多关系。如上所述首先创建帖子。然后查询要添加的注释,将对象添加到关系

r = Replies.objects.get(pk = 1)
p.comments.add(r)

希望有所帮助