3

私はこのようなモデルを持っています:

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

新しいMyModelが送信されたときに、コードフィールドを空のままにしておく必要があります。その場合、Djangoで空のファイル(任意の名前)を作成する必要があります。

質問は:それを行う正しい方法は何ですか?

ドキュメントに関連するものが見つからなかったので、MyModelForm()にフィードする前にrequest.FILESを手動で編集することを検討していましたが、これは私には汚いハックのように見えます...何かアイデアはありますか?

ありがとう。

4

2 に答える 2

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")
于 2010-07-12T06:23:50.123 に答える
1

nullと空白を許可するようにフィールドを設定するだけです。これにより、フィールドがオプションになります。

code = models.FileField(null=True, blank=True)
于 2012-03-25T03:09:45.273 に答える