как добавить изображение в пост блога django


Я работаю над блогом с 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.имидж', даже после выполнения manage.py sqlflush и повторная синхронизация мой дБ.

И у меня есть такая точка зрения:

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

В принципе, я хотел бы иметь возможность добавлять изображение в сообщение и шаблон для его отображения.

Я пробовал admin-files и различные другие приложения и пробовал так много фрагментов кода с чужого сайта, но просто ничего не работает, так что это не из-за отсутствия попыток. Самое близкое к тому, что я хочу найти здесь: http://drumcoder.co.uk/blog/2010/may/12/django-blog-images/ (что также не сработало для меня), просто я хочу этого быть частью моей почтовой модели.

Есть ли простой способ сделать это? Как должны выглядеть модель и шаблон? Любая помощь будет очень признательна, спасибо.
2 2

2 ответа:

Предполагая, что вы добавили image после того, как вы сделали ./manage.py syncdb. Затем либо удалите базу данных и syncdb снова (не рекомендуется). Или добавьте Django South для миграции данных (предпочтительно).

Как работать с Югом? Когда вы добавите Юг в свой проект. Сначала удалите поле image, чтобы ваша модель выглядела точно так же, как и раньше. Затем выполните следующие действия:

  • python manage.py convert_to_south myapp.блог
  • python manage.py мигрируйте myapp.блог 0001 -- подделка
Теперь добавьте поле image обратно в модель Post и выполните следующие действия:
  • python manage.py schemamigration myapp.блог --auto
  • python manage.py мигрируйте myapp.блог

На основании того, что экземпляр ImageField по умолчанию содержит столбцы varchar(100) , Вы можете просто добавить столбец varchar(100) с именем image в таблицу APPNAME_post.

Это можно сделать с помощью соответствующего графического интерфейса (например, pgAdmin III для PostgreSQL) или через интерфейс командной строки (например, psql) с командой, подобной следующей:

ALTER TABLE APPNAME_post ADD COLUMN image varchar(100);
Лично я бы согласился с предложением Амира использовать Юг. Это может быть больше работы, чтобы настроить его, но это будет будьте неоценимы для любых будущих изменений схемы.