2017-10-19 6 views
0

Je crée une page de téléchargement de fichiers dans laquelle les fichiers seront enregistrés avec un préfixe différent dans leur nom (la fonction get_file_path utilise instance.mname) mais passera par le même modèle/formulaire de téléchargement. Je veux que le préfixe soit déclaré dans les vues sous forme dans mname = 'prefix'. Comment puis-je transmettre cette valeur des vues à la forme?Transmettre l'attribut de modèle Django

Merci!

models.py

class Upload(models.Model): 

    mname = # need it to be passed 
    document = models.FileField(upload_to=get_file_path, validators=[validate_file_extension]) 
    upload_date=models.DateTimeField(auto_now_add =True) 

forms.py

class UploadForm(forms.ModelForm): 
    class Meta: 
     model = Upload 
     fields = ('document',) 

views.py

def uploadFile(request): 
    if request.method == "POST": 

     file = UploadForm(request.POST, request.FILES, mname='....') 
     if file.is_valid(): 
      file.save() 

Répondre

0

Vous pouvez ajouter un paramètre à la __init__ de la forme:

UploadForm(forms.Form): 

    def __init__(self, path, *args, **kwargs): 
     super(UploadForm, self).__init__(*args, **kwargs) 
     self.fields['document'] = forms.FileField(upload_to=path, validators=[validate_file_extension]) 

et initialiser le formulaire avec ce paramètre:

file = UploadForm(request.POST, request.FILES, path='...') 
+0

merci! semble très proche de travailler mais renvoie __init __() a un argument inattendu 'upload_to' –

+0

L'avez-vous essayé sans les validateurs ... celui-ci que je viens de copier à partir de votre exemple mais n'a probablement pas sa place ici. – sinned

+0

Je pense que c'est peut-être parce que vous ne pouvez pas utiliser un modèle avec le téléchargement de fichiers –