Вот эффективный способ сделать это независимо от платформы:
import subprocess
import os
import platform
def is_tool(name):
try:
devnull = open(os.devnull)
subprocess.Popen([name], stdout=devnull, stderr=devnull).communicate()
except OSError as e:
if e.errno == os.errno.ENOENT:
return False
return True
def find_prog(prog):
if is_tool(prog):
cmd = "where" if platform.system() == "Windows" else "which"
return subprocess.call([cmd, prog])
Если бы пользователь не может быть изменен, я сказал бы, что это не должно даже быть включено в форму во-первых.
Так или иначе, использование commit
аргумент для предотвращения полученного объекта, сохраняемого сразу, должен работать (принятие FormPreview
использование ModelForm
):
obj = form.save(commit=False)
obj.user = request.user
obj.save()