使用 django-photologue 将单个图像分配给模型

Using django-photologue to assign single image to a model

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

第一次尝试:

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

迁移成功,选项出现在 post 管理员中。它显示了 photologue 库中所有图像的下拉列表。我试图在管理员中创建一个测试 post,它导致了 ProgrammingError

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

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

我在尝试为 post 创建类别时遇到了同样的错误,我使用 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 管理员的下拉列表显示了 photologue 存储的所有图像。这个解决方案不是很有效,因为该站点将存储大量图像,其中很少与博客 [​​=46=] 相关。有没有办法将此列表过滤为单个画廊?

2) ManyToManyField 的第二个解决方案也是多余的。也就是说,它反映了允许 post 与一个或多个 post 类别相关的类别功能,并允许类别与任意数量的博客 post 相关。对于特色图像,这不是必需的,每个 post 必须与单个图像相关(多个 post 可以 link 到同一图像),但图像不需要相关到博客 posts,这使得 ManyToManyField 可能是一个错误的使用,但我不确定使用 OneToOneFieldManyToOneField 的天气? OneToOne 关系是否防止多个 post 到 link 到同一图像?

根据 Andreas 的评论:您的数据库似乎没有反映您的 Post 模型;看起来您的迁移尚未应用于数据库(运行 python manage.py migrate --list 以查看它们),或者您尚未为 Post 模型创建迁移 - refer to the migrations documentation for more information.

关于你的'couple notes':

1) 单个画廊是否要进行硬编码?如果是,则 in the admin you can filter down the list of image instances to be displayed in the list - 在该页面上查找 formfield_for_foreignkey()

2) OneToOne 字段将对一张图像强制执行 post;这可能是您想要的,也可能不是!