关于 python:Wagtail: 将 Django 表单传递给 WagtailAdmin (Sidebar: Forms)

Wagtail: Passing Django form to WagtailAdmin (Sidebar: Forms)

我有一个非常有趣的任务。

  • 带有 FileField 的 Wagtail 表单 - 用于图像上传(我想这还不可能)

鉴于这在 Wagtail 中还不可能,我尝试了另一件事。

  • 一个实际上有一个 FileField 的 Django 表单(来自 wagtail 中的这个示例 django 表单)。
  • 生成上传图片的链接(比如说\\'/media/pics/image_example.jpg\\')
  • 不知何故将此链接(文本字段)传递给 Wagtail Form 并自动提交。
  • 所以最后,我们在 WagtailAdmin 中有一个表单提交,其中有一个包含上传图片的直接 url 的字段。

    但是.. 我真的不明白这必须如何工作。有任何想法吗?也许我的问题有更好的解决方案。


    有下面提到的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def content_file_name(instance, filename):

        import random
        import string

        # random_str length will be 16 which will be combination of (4 digits + 4 characters + 4 digits + 4 characters)
        random_str = "".join([random.choice(string.uppercase) for i in range(0,4)]) +"".join([random.choice(string.digits) for i in range(0,4)]) + \\
                       "".join([random.choice(string.lowercase) for i in range(0,4)]) +"".join([random.choice(string.digits) for i in range(0,4)])

        # return string seperated by hyphen eg:
        random_str =  random_str[:4] +"-" + random_str[4:8] +"-" + random_str[8:12] +"-" + random_str[12:]
        filetype = filename.split(".")[-1].lower()
        filename = random_str +"." +  filetype
        path ="yourapp/uploads/" + str(datetime.datetime.now().year) +"/" + str(datetime.datetime.now().month) +"/" + str(datetime.datetime.now().day) +"/"
        os_path = os.path.join(path, filename)
    return os_path

    现在将上述方法添加到带有附件的模型字段中
    例如:-

    1
    atachement = models.FileField(upload_to=content_file_name, blank=True, null=True, verbose_name='Attachment')

    WagtailForm.save()
    将保存您的数据。