0

我写了一个处理文件和 URL 上传的图像上传表单。这是一个模型表单,它向数据库提交未发布的图像。

class UnpublishedImage(Model(20)):
    picture = ImageField(help_text=_('Unpublished picture'), upload_to=settings.UNPUBLISHED_PICTURE_UPLOAD_TO)

该 Model(20) 为每个模型提供了一个 pid 字段(20 个随机 slug 字符),我将其用作模型的公共 ID。

未发布的图像工作得很好,但现在我想使用它们,即我想发布它们。

class Look(Model(20)):
    user = OneToOneField(get_user_model(), editable=False)
    title = CharField(max_length=40)
    description = TextField(max_length=160)
    #image = OneToOneField(UnpublishedImage)

为了清楚起见,它分两个步骤工作:

  1. 用户上传图片(未发布)
  2. 下一个表单显示图像并允许添加描述、标题等。

现在,我不能将 OneToOneField 用于 UnpublishedImage 模型,因为我想在发布图像后立即将其从未发布的表(和存储)中删除。你如何推荐这样做?

我已经尝试过 ImageField,但我不知道如何将图像提供给表单。

请注意,还有第三种形式用于检索未发布的图像,因此您可以使用它。

class UnpublishedImagePublishForm(Form):
    image = CharField()

    def clean_image(self):

        # Get the unpublished object
        try:
            unpublished = UnpublishedImage.objects.get(pid=self.cleaned_data['image'])
        except UnpublishedImage.DoesNotExist:
            raise ValidationError(_("Image not found"))

        return unpublished

这样我可以得到图像:

    # Get the unpublished image
    unpublished = UnpublishedImagePublishForm(request.DATA)
    if not unpublished.is_valid():
        return Response(unpublished.errors, status=HTTP_422_UNPROCESSABLE_ENTITY)

    # Get the unpublished image instance
    image = unpublished.cleaned_data['image']

提前致谢。

4

0 回答 0