【问题标题】:Using django-photologue to assign single image to a model使用 django-photologue 将单个图像分配给模型
【发布时间】:2016-09-19 15:30:39
【问题描述】:

我正在开发我在 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 关系是否会阻止多个帖子链接到同一张图片?

【问题讨论】:

  • 您确定已迁移 photologue 模型吗? python manage.py migrate photologue
  • @Andreas 我已经迁移了所有应用并运行了syncdb,两个版本的结果完全相同
  • @Andreas - python manage.py migrate photologue 将仅迁移 Photologue 应用程序中的模型,而不是 OP 在其应用程序中创建的 Post 模型。

标签: python django postgresql photo photologue


【解决方案1】:

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

关于你的“情侣笔记”:

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.image.get_absolute_url }} 只会给我 photologue 画廊 (mypage.com/media/photologue/photos/image-slug/) 中照片的 url,而不是实际图像本身。我在 Photo 模型变量中看不到任何可以让我获得实际图像 url 的地方。或者有没有办法以类似于 {% static "..." %} 文件的方式显示它?
  • 啊,没关系,我想通了。我尝试使用{{ post.image.url }},但它没有显示任何内容。经过一番挖掘,我发现我错过了实际的图像对象。正确的解决方案是{{ post.image.image.url }}。
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多