我写了一个处理文件和 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)
为了清楚起见,它分两个步骤工作:
- 用户上传图片(未发布)
- 下一个表单显示图像并允许添加描述、标题等。
现在,我不能将 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']
提前致谢。