我试图创建一个Comment类,以便我可以用它来评论任何类型的对象。我在这里找到了一个解决方案:https://docs.djangoproject.com/en/1.11/ref/contrib/contenttypes/ 但是,它没有用。 (我必须承认,我并不了解他们使用的content_type和object_id的所有内容,我只是从他们的页面复制了代码)
这是我的模特:
class Comment(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
author = models.CharField(max_length=200, default="userPasDef")
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
def publish(self):
self.created_date = timezone.now()
self.author = "userPasDef"
self.save()
def __str__(self):
return self.text
这是错误:
追踪(最近一次通话): 文件" /home/computer/Documents/virtualenv/lib/python3.5/site-packages/django/db/backends/utils.py" ;,第65行,执行 return self.cursor.execute(sql,params) psycopg2.ProgrammingError:column" content_type_id"关系" Application_comment"不存在 第1行:插入" Application_comment" (" content_type_id"," objec ...
但我没有" content_type_id"在我的模特中...... 我可以运行makemigrations,migrate和runserver,但每次我尝试在我的网站上发布评论时都会出现此错误。 什么可能导致这个问题?
谢谢! :)
编辑: "显示python manage.py showmigrations"
的输出应用 [X] 0001_initial
(我尝试删除所有数据库和以前的迁移以重置它们但它没有解决问题)
"以及包含评论"
的应用的所有迁移文件 migrations.CreateModel(
name='Comment',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField()),
('author', models.CharField(default='userPasDef', max_length=200)),
('text', models.TextField()),
('created_date', models.DateTimeField(default=django.utils.timezone.now)),
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
],
),
答案 0 :(得分:1)
所以,对于那些与我有同样问题的人来说,问题不在我的模型中,而在我的数据库中。我删掉了postgre中的所有表格,再次进行了迁移,一切正常。我真的不应该删除所有这些迁移文件(我不知道它们是如此重要)。没有它们,Django就会丢失,因为他无法记住数据库的当前状态。 :)