Django FileField: как установить значение по умолчанию (автоматически создать пустой файл)?
У меня есть такая модель:
class MyModel(models.Model):
name = models.CharField(max_length=255)
code = models.FileField()
Когда отправляется новая MyModel, я хочу, чтобы поле кода оставалось пустым, и в этом случае мне нужно Django для создания пустого файла (с произвольным именем).
Вопрос в том, как правильно это сделать?
Я не смог найти ничего связанного в документах, поэтому я смотрел на ручное редактирование запроса. ФАЙЛЫ, прежде чем передать его в MyModelForm(), но это выглядит для меня грязным хаком... Есть идеи?
Благодарю.
2 ответа
Я хотел бы сохранить ввод кода в 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")
Просто установите поле, чтобы пустое и пустое. Это сделает поле необязательным.
code = models.FileField(null=True, blank=True)