2

我正在使用 django 编写博客,我想弄清楚的最后一件事是如何在我的博客上发布图片。我已经可以通过我的管理面板很好地发布一些文本,我现在想要的是能够在帖子中添加图像。我是一个完整的新手,所以请原谅任何基本错误。

我想到了一个这样的模型:

class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True, max_length=255)
    description = models.CharField(max_length=255)
    content = models.TextField()
    published = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    image = models.ImageField(upload_to='media')

    class Meta:
        ordering = ['-created']

    def __str__(self):
        return ('%s') % self.title

    def get_absolute_url(self):
        return reverse('blog.views.post', args=[self.slug])

虽然当我尝试这个时,我得到一个错误'没有这样的列 blog_post.image',即使在执行 manage.py sqlflush 并重新同步我的数据库之后。

我有这样的看法:

def index(request):
    posts = Post.objects.filter(published=True)
    return render(request, 'blog/index.html', {'posts': posts})

基本上我想选择将图像添加到帖子和模板以显示它。

我尝试了管理文件和其他各种应用程序,并尝试了很多其他人网站上的代码片段,但没有任何效果,所以这并不是因为缺乏尝试。在这里找到最接近我想要的东西:http: //drumcoder.co.uk/blog/2010/may/12/django-blog-images/(这对我也不起作用),只是我想要它成为我的 Post 模型的一部分。

有没有一种简单的方法可以做到这一点?模型和模板应该是什么样子?任何帮助将不胜感激,谢谢。

4

2 回答 2

3

假设你image在完成后添加了./manage.py syncdb. 然后再次删除数据库和syncdb(不是首选)。或者添加Django South进行数据迁移(首选)。

如何与南方合作?当您在项目中添加了南时。首先删除该image字段,以便您的模型看起来与以前完全相同。然后执行以下步骤:

  • python manage.py convert_to_south myapp.blog
  • python manage.py migrate myapp.blog 0001 --fake

现在将image字段添加回您的Post模型并执行以下步骤:

  • python manage.py schemamigration myapp.blog --auto
  • python manage.py 迁移 myapp.blog
于 2013-05-05T21:40:37.203 回答
1

ImageField 实例默认为 varchar(100) 列的基础上,您可以简单地添加一个名为imageAPPNAME_post 表的 varchar(100) 列。

这可以使用适当的 GUI(例如:PostgreSQL 的 pgAdmin III)或使用类似于以下命令的命令行界面(例如:psql)来完成:

ALTER TABLE APPNAME_post ADD COLUMN image varchar(100);

就个人而言,我会接受 Aamir 使用 South 的建议。设置它可能需要更多的工作,但对于未来的任何模式更改都将是无价的。

于 2013-05-06T01:33:09.270 回答