将ImageField默认值设置为Django中的图像列表中的随机图像

use*_*847 1 python random django django-models imagefield

我在静态目录中有一些图像,想要创建一个具有ImageField的模型.我想将默认字段设置为这些图像中的任何一个.我试过用这个 -

def randomImage():
    return ImageFile('media/blog/image/' + str(random.randrange(1, 15, 1)) + '.jpg')

# ----------------------- Model for each post in the blog-------------------
class Post(models.Model):
    heading = models.CharField(max_length=150)
    author = models.ForeignKey(User)
    postBody = models.TextField()
    postDate = models.DateTimeField('posting date')
    postImage = models.ImageField(upload_to='media/blog/image/'+str(int(time.time())), default=randomImage)
Run Code Online (Sandbox Code Playgroud)

JPG*_*JPG 6

在这里我做了一些假设,
1.您的默认图像static目录
2内.在static目录中,所有文件都是图像

这里的主要诀窍是什么?

Django只需要一个有效的文件路径来创建或更新文件条目(图像也是一个文件).所以,我们在这里做的是,列出所有文件(假设那些只是图像)并随机选取一个条目random.choice()并将一个absoulute路径(类似于static/my_img.jpg)重新调整到default参数中

import time
from random import choice
from os.path import join as path_join
from os import listdir
from os.path import isfile


def random_img():
    dir_path = 'static'
    files = [content for content in listdir(dir_path) if isfile(path_join(dir_path, content))]
    return path_join(dir_path, choice(files))


class Post(models.Model):
    # other fields
    postImage = models.ImageField(
        upload_to='media/blog/image/' + str(int(time.time())),
        default=random_img)
Run Code Online (Sandbox Code Playgroud)



UPDATE-1

我在Django 2.1.1中创建了一个最小的例子,可以在下面的git repo
Repopsitory链接中找到 - > django2X
1.克隆存储库,创建虚拟环境并安装依赖项(提供requirements.txt文件)2.创建
一个新的超级用户或者使用我的(用户名 - > admin, 传递- > jerin123@)3.
运行服务器并登录到django admin :( screenshot-1)
4.创建一个新Post实例(一次又一次)

就是这样

UPDATE-2

我做了我的一些变化最小的例子,这是
1.创建一个简单的对象创建(这里的Post模型对象),而每一个Django的启动(结账sample/app.py)
2.增加MEDIA_ROOTMEDIA_URLsettings.py文件

现在,开始你的项目(它会创建每个启动时有3个对象)并转到http://127.0.0.1:8000/admin/sample/post/.
然后打开任何实例并单击图像链接(屏幕截图-2)它将打开图像(屏幕截图-3)