我正在我的第一个项目在Django,其第一部分是一个博客应用程序。我已经安装了django-photologue,这对于以后的应用程序的预期目的来说似乎非常有用。虽然此应用稍后将广泛用于在其他应用中发布图库,但将单张照片分配给模型仍然无法实现。也就是说,我想要的是将一个图像分配给每个帖子,这将是一个精选的图像显示在生成的帖子列表。我尝试了几种不同的方式,总是导致相同的错误。使用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...
从我的理解,试图建立一个关系落空,因为它缺乏image_id列分配的PK(虽然我不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模型进一步混淆了我。任何关于如何正确设置我的模型或使用照片从光影片分配单个图像的模型示例的建议?
一对夫妇的注意事项:
1)岗位管理的下拉列表中显示的photologue存储的所有图像。这个解决方案效率不高,因为该网站会存储大量图片,而其中很少会与博客文章相关。有没有办法将这个列表过滤到单个画廊?
2)ManyToManyField
的第二种解决方案也是多余的。也就是说,它反映了允许帖子与一个或多个帖子类别相关的类别功能,并允许类别与任意数量的博客帖子相关。对于精选图片来说,这不是必要的,每个帖子必须与单个图片相关(多个帖子可以链接到相同的图片),但图片不需要与博客帖子相关,这使ManyToManyField
也许是一个错误的使用,但我不确定天气使用OneToOneField
或ManyToOneField
? OneToOne关系是否阻止多个帖子链接到同一图像?
您确定光影模型已迁移? 'python manage.py migrate photologue' – Andreas
@Andreas我已经迁移了所有的应用程序并运行了syncdb,两个版本的结果都完全相同 – Ablivion
@Andreas - “python manage.py migrate photologue”将仅迁移Photologue应用程序中的模型而不是OP在他/她的应用程序中创建的Post模型。 –