0

我正在开发我在 django 中的第一个项目,它的第一部分是一个博客应用程序。我已经安装了 django-photologue,这对于以后的应用程序的预期目的似乎非常有用。虽然这个应用程序稍后将被广泛用于在其他应用程序中发布画廊,但我仍然无法将单张照片分配给模型。也就是说,我想要为每个帖子分配一个图像,这将是一个特色图像,显示在生成的帖子列表中。我尝试了几种不同的方式,总是导致相同的错误。

第一次尝试:

class Post(models.Model):
    ...
    image = models.ForeignKey(Photo, related_name='posts')
    ...

迁移工作,该选项出现在帖子管理中。它显示了 photologue 库中所有图像的下拉列表。我试图在管理员中创建一个测试帖子,结果导致 ProgrammingError

column posts_post.image_id does not exist
LINE 1: ..., "posts_post"."created", "posts_post"."updated", "posts_pos...

据我了解,尝试创建关系失败是因为它缺少分配 pk 的 image_id 列(尽管我不是 100% 确定这是问题所在)。

当我尝试为帖子创建类别时,我遇到了同样的错误,我使用它解决了这个问题,ManyToManyField所以我试了一下。

第二次尝试:

class Post(models.Model):
    ...
    image = models.ManyToManyField(Photo, blank=False, through='ImageToPost')
    ...

class ImageToPost(models.Model):
    post = models.ForeignKey(Post)
    image = models.ForeignKey(Photo)

更新模型后,makemigrations没有错误,但这样做会migrate产生类似的错误:

psycopg2.ProgrammingError: column "image_id" of relation "posts_post" does not exist

再次弹出 postgree 的编程错误。现在我对 django 的了解是有限的,所以尝试通过 photologue 模型让我更加困惑。关于如何正确设置我的模型或使用 Photo 将单个图像从 photologue 分配给它的模型示例的任何建议?

几点注意事项:

1)post admin的下拉列表显示了photologue存储的所有图像。该解决方案效率不高,因为该站点将存储大量图像,而其中很少有与博客文章相关的图像。有没有办法将此列表过滤到单个画廊?

2)第二个解决方案ManyToManyField也是多余的。即,它反映了允许帖子与一个或多个帖子类别相关的类别功能,并允许类别与任意数量的博客帖子相关。对于特色图片,这不是必需的,每个帖子必须与单个图像相关(多个帖子可以链接到同一个图像),但图像不需要与博客帖子相关,这ManyToManyField可能会导致使用错误,但我不确定天气要使用OneToOneField还是ManyToOneField?OneToOne 关系是否会阻止多个帖子链接到同一张图片?

4

1 回答 1

1

根据 Andreas 的评论:您的数据库似乎没有反映您的 Post 模型;看起来您有尚未应用于数据库的迁移(运行python manage.py migrate --list以查看它们),或者您尚未为 Post 模型创建迁移 -请参阅迁移文档以获取更多信息

关于你的“情侣笔记”:

1) 单个画廊会被硬编码吗?如果是,那么在管理员中,您可以过滤要在列表中显示的图像实例列表-formfield_for_foreignkey()在该页面上查找。

2) OneToOne 字段将强制一个帖子对一个图像;这可能是也可能不是你想要的!

于 2016-09-20T19:59:32.390 回答