我有一个这样的模型:
class MyModel(models.Model):
name = models.CharField(max_length=255)
code = models.FileField()
提交新的MyModel时,我想允许代码字段保留为空,在这种情况下,我需要Django创建一个空文件(具有任意名称).
问题是:正确的方法是什么?
我在文档中找不到任何相关内容,因此我一直在寻找手动编辑request.FILES并将其提供给MyModelForm()的方法,但这对我来说似乎是个肮脏的hack……任何想法吗?
谢谢.
解决方法:
我会将输入的代码存储在CharField中,然后创建一个访问模型的单独函数,如果代码不包含任何有害方法,则将其写入文件.
这将负责创建文件(因为空白的CharField将仅输出为空文件),并允许委派给安全检查器.然后,您的设置将如下所示:
模型:
class MyModel(models.Model):
name = models.CharField(max_length=255)
code = models.CharField(MAX_FILE_LENGTH)
视图:
def Submit_Code(request):
#Create MyModel using POST data
process_input_file(NEWLY_CREATED_MODEL_NAME)
return HttpResponse("Upload Successful")
def process_input_file(modelName):
#assuming unique name. Use "id=" instead if needed.
mm = MyModel.objects.get(name=modelName)
if passes_security_checks(mm.code):
f = open(mm.name, "r")
f.write(mm.code)
f.close()
编辑
新视图:
def Submit_Code(request):
mm = MyModel()
mm.name = request.POST.get('name')
f = open(mm.name,"r")
f.write(request.POST.get('code')
f.close()
#then associate the newly created file with the FileField however you want
#passing through authentication/checking if need be.
return HttpResponse("Upload Successful")
标签:django-forms,filefield,python,django,autocreate
来源: https://codeday.me/bug/20191209/2097915.html