我正在做我在django的第一个项目,第一部分是一个博客应用程序。我已经安装了django-photologue,对于以后的应用程序来说,它似乎非常有用。虽然这个应用程序将在以后广泛用于在其他应用程序中发布图库,但我仍然无法将单个照片分配给一个模型。也就是说,我想要的是分配给每个帖子一个单一的图像,这将是一个特色图像显示在生成的帖子列表上。我尝试了几种不同的方法,总是导致相同的错误。
第一次尝试:
class Post(models.Model):
...
image = models.ForeignKey(Photo, related_name='posts')
...迁移成功了,该选项出现在后期管理中。它显示了照片库中所有图像的下拉列表。我尝试在管理员中创建一个测试帖子,结果生成了一个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的了解是有限的,所以尝试通过照片模型使我更加困惑。关于如何正确设置我的模型或使用Photo将照片中的单个图像分配给它的模型示例,有什么建议吗?
以下是一些注意事项:
1)来自post admin的下拉列表显示了photologue存储的所有图像。这种解决方案不是很有效率,因为网站将存储大量的图片,而其中很少有与博客帖子相关的图片。有没有办法把这个列表过滤成一个单独的图库?
2)使用ManyToManyField的第二个解决方案也是多余的。也就是说,它反映了类别功能,该功能允许帖子与一个或多个帖子类别相关,并允许类别与任意数量的博客帖子相关。对于特色图片,这不是必须的,每个帖子必须与单个图片相关(多个帖子可以链接到同一张图片),但图片不需要与博客帖子相关,这使得使用ManyToManyField可能是错误的,但我不确定是否使用OneToOneField或ManyToOneField?OneToOne关系是否可以防止多个帖子链接到同一张图片?
发布于 2016-09-21 03:59:32
根据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字段将强制对一个图像执行一次发布;这可能是您想要的,也可能不是!
https://stackoverflow.com/questions/39576870
复制相似问题