Django FileField: 如何设置默认值(自动创建空文件)?

3 投票
2 回答
6293 浏览
提问于 2025-04-16 01:08

我有一个这样的模型:

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    code = models.FileField()

当提交一个新的 MyModel 时,我想允许 code 字段可以留空,这样的话我需要 Django 创建一个空文件(名字可以随便)。

我的问题是:这样做的 正确 方法是什么呢?

我在文档里找不到相关的信息,所以我考虑手动编辑 request.FILES,然后再把它传给 MyModelForm(),但我觉得这看起来像是个不太干净的解决办法……有没有什么好的主意?

谢谢。

2 个回答

0

只需要把这个字段设置为允许空值和空白。这样一来,这个字段就变成可选的了。

code = models.FileField(null=True, blank=True)
2

我会把代码输入存储在一个字符字段里,然后创建一个单独的函数来访问这个模型。如果代码里没有任何有害的方法,就把它写入一个文件。

这样可以处理文件的创建(因为一个空的字符字段会直接输出到一个空文件里),同时也能把安全检查的工作交给其他地方。你的设置大概会像下面这样:

模型:

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")

撰写回答