Django FileField: как установить значение по умолчанию (автоматически создать пустой файл)? - PullRequest
3 голосов
/ 11 июля 2010

У меня есть такая модель:

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

Когда отправляется новая модель MyModel, я хочу, чтобы поле code оставалось пустым, и в этом случаеМне нужен Django для создания пустого файла (с произвольным именем).

Вопрос в том, как это сделать правильно ?

Я не смог ничего найтисвязанные с документами, поэтому я смотрел на запрос на ручное редактирование. ФАЙЛЫ перед подачей его в MyModelForm (), но мне это кажется грязным хаком ... Есть идеи?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Я бы сохранил введенный код в 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")
1 голос
/ 25 марта 2012

Просто установите в поле пустое значение.Это сделает поле необязательным.

code = models.FileField(null=True, blank=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...