在django表单上使用本地图像

时间:2013-06-25 22:54:02

标签: django django-forms django-models

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

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

该模型(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. 下一个表单显示图像并允许添加说明,标题等
  3. 现在,我无法将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']
    

    提前致谢。

0 个答案:

没有答案