2016-09-19 71 views
0

我正在我的第一个项目在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也许是一个错误的使用,但我不确定天气使用OneToOneFieldManyToOneField? OneToOne关系是否阻止多个帖子链接到同一图像?

+0

您确定光影模型已迁移? 'python manage.py migrate photologue' – Andreas

+0

@Andreas我已经迁移了所有的应用程序并运行了syncdb,两个版本的结果都完全相同 – Ablivion

+0

@Andreas - “python manage.py migrate photologue”将仅迁移Photologue应用程序中的模型而不是OP在他/她的应用程序中创建的Post模型。 –

回答

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字段将执行一个帖子到一个图像;这可能会或可能不会成为你想要的!

+0

谢谢你的回复。是的,迁移确实存在问题。我刚刚删除了所有先前的迁移,并运行新的迁移并运行。外键的第一个选项似乎已经做到了,这解决了我的第二个问题。 – Ablivion

+0

此外,我无法找到有关如何在模板中正确显示图像的文档。使用{{post.image.get_absolute_url}}只会给我的照片在photologue画廊(mypage.com/media/photologue/photos/image-slug/),而不是实际的图像本身。我没有看到照片模型变量中的任何地方,让我得到实际的图像网址。或者有没有类似{%static“...”%}文件的方式显示它的方法? – Ablivion

+0

啊,没关系,我知道了。我尝试使用'{{post.image.url}}'但它没有显示任何东西。小挖后,我发现我错过了实际的图像对象。正确的解决方案是'{{post.image.image.url}}'。 – Ablivion

相关问题