Как загрузить видеофайл в админку django ЧЕРЕЗ КОНСОЛЬ?

Есть модели Post и Result. Я хочу через консоль добавить файл (видео) в базу данных админки django.

С текстом делается так:

python manage.py shell
>>> from posts.models import Post, Result
>>> a = Post.objects.get(id = 3)
a.result_set.create(text = 'text')

models.py

class Post(models.Model):
    video = models.FileField(upload_to='filesInput/')
    csv = models.FileField(upload_to='filesInput/')
    csvTimeL = models.CharField(max_length = 50, default = '00:00:02.02')
    csvTimeR = models.CharField(max_length = 50, default = '00:00:02.4')
    urlTimeL = models.CharField(max_length = 50, default = 3)
    urlTimeR = models.CharField(max_length = 50, default = 8)
    siteUrl = models.CharField(max_length = 300)

    def __str__(self):
        return self.siteUrl

class Result(models.Model):
    inputData = models.ForeignKey(Post, on_delete = models.CASCADE)
    resVideo = models.FileField()

    def __str__(self):
        return self.resVideo.url

Нужно вместо 'text' вставить файл на локалке.


Ответы (1 шт):

Автор решения: nomnoms12

Вам необходимо обернуть файл в специальный класс. Например, в ContentFile.

Пример:

from django.core.files.base import ContentFile
from .models import Post, Result


video_name = 'video.webm'
with open(video_name, 'rb') as f:
    video_content = f.read()

post = Post()
post.video.save(video_name, ContentFile(video_content))
post.save()

resVideo_name = 'resVideo.webm'
with open(resVideo_name, 'rb') as f:
    resVideo_content = f.read()

result = Result()
result.inputData = post
result.resVideo.save(resVideo_name, ContentFile(resVideo_content))
result.save()
→ Ссылка