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