2016-01-28 1 views
1

J'essaie de créer un formulaire à partir de 2 modèles en utilisant python et django. ci-dessous montre mes modèles:créer un formulaire depuis 2 modèles python django: [Errno 2] Aucun fichier ou répertoire

# Create your models here. 
class Action(models.Model): 
    name = models.CharField("Action name", max_length=50) 
    keywords = models.CharField("Keywords", max_length=50) 
    object = models.CharField("Object", max_length=50, blank=True, null=True) 
    uploadDate = models.DateField("Date", default=get_current_date) 
    UploadedBy = models.CharField("UploadedBy", max_length=50, default="") 

class Image(models.Model): 
    image = models.FileField(upload_to=get_upload_file_name, default="") 
    action = models.ForeignKey(Action) 

et les classes de formulaire:

class ActionForm(ModelForm): 
    #bind form to Action model 
    class Meta: 
     model = Action 
     fields = ['name','keywords', 'object', 'UploadedBy', 'uploadDate'] 

class ImageForm(ModelForm): 
    class Meta: 
     model= Image 
     fields =['image'] 

Le code dans les vues qui crée la page du modèle createForm.html:

def actioncreate(request): 
if request.method == "GET": 
    #create the object - Actionform 
    form = ActionForm; 
    form2 = ImageForm; 
    #pass into it 
    return render(request,'app/createForm.html', { 'form':form, 'form2':form2}) 
elif request.method == "POST": 
    # take all of the user data entered to create a new action instance in the table 
    form = ActionForm(request.POST, request.FILES) 
    form2 = ImageForm(request.POST, request.FILES) 
    if form.is_valid() and form2.is_valid(): 
     #prepare action model 
     act = form.save(commit=False) 
     #set the action_id Foreignkey 
     act.action_id = form2.save() 
     act.save() 
     return HttpResponseRedirect('/actions') 
    else: 
     form = ActionForm() 
     form2 = ImageForm; 
     return render(request,'app/createForm.html', { 'form':form, 'form2':form2 }) 

modèle de formulaire:

<form method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <ul> 
    {{ form.as_ul }} 
    {{ form2.as_ul }} 
    </ul> 
    <button type="submit">Save</button> 
    <button name="cancel" onclick="navigate({% url 'home' %})">Cancel</button>     
</form> 

Le formulaire affiche bien lorsque la page est accessible, mais une fois soumis je reçois cette erreur:

[Errno 2] Aucun fichier ou répertoire

et il ne semble pas aimer la ligne:

act.action_id = form2.save() 

Les modèles créés ont définitivement tous les champs auxquels je fais référence et bien que j'obtiens cette erreur la première moitié (ActionForm) enregistre dans la base de données, mais pas l'imageForm. De l'aide serait grandement appréciée!

EDIT

Erreur:

OSError at /actions/create 
[Errno 2] No such file or directory 
Request Method: POST 
Request URL: http://127.0.0.1:8000/actions/create 
Django Version: 1.8.7 
Exception Type: OSError 
Exception Value:  
[Errno 2] No such file or directory 
Exception Location: C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\core\files\storage.py in _save, line 248 
Python Executable: C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\Scripts\python.exe 
Python Version: 2.7.0 
Python Path:  
['C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2', 
'C:\\WINDOWS\\SYSTEM32\\python27.zip', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\DLLs', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\lib', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\lib\\plat-win', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\lib\\lib-tk', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\Scripts', 
'C:\\Python27\\Lib', 
'C:\\Python27\\DLLs', 
'C:\\Python27\\Lib\\lib-tk', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env', 
'C:\\Users\\Rebecca\\Documents\\FINALYEAR\\CSbackup\\MyActionDefiner3 - 2tblWorking - Copy\\MyActionDefiner2\\env\\lib\\site-packages'] 
Server time: Thu, 28 Jan 2016 15:24:04 +0000 

Traceback

Request Method: POST 
Request URL: http://127.0.0.1:8000/actions/create 

Django Version: 1.8.7 
Python Version: 2.7.0 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'app', 
'django.contrib.admin', 
'django.contrib.admindocs') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\core\handlers\base.py" in get_response 
132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\app\views.py" in actioncreate 
53.    act.action_id = form2.save() 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\forms\models.py" in save 
459.        construct=False) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\forms\models.py" in save_instance 
105.   instance.save() 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\base.py" in save 
734.      force_update=force_update, update_fields=update_fields) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\base.py" in save_base 
762.    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\base.py" in _save_table 
846.    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\base.py" in _do_insert 
885.        using=using, raw=raw) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\manager.py" in manager_method 
127.     return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\query.py" in _insert 
920.   return query.get_compiler(using=using).execute_sql(return_id) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql 
973.    for sql, params in self.as_sql(): 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\sql\compiler.py" in as_sql 
931.     for obj in self.query.objs 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\fields\files.py" in pre_save 
314.    file.save(file.name, file, save=False) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\db\models\fields\files.py" in save 
93.    self.name = self.storage.save(name, content, max_length=self.field.max_length) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\core\files\storage.py" in save 
63.   name = self._save(name, content) 
File "C:\Users\Rebecca\Documents\FINALYEAR\CSbackup\MyActionDefiner3 - 2tblWorking - Copy\MyActionDefiner2\env\lib\site-packages\django\core\files\storage.py" in _save 
248.      fd = os.open(full_path, flags, 0o666) 

Exception Type: OSError at /actions/create 
Exception Value: [Errno 2] No such file or directory 
+2

S'il vous plaît montrer l'erreur complète et traceback. –

Répondre

1

Vous devez spécifier un sous-répertoire de MEDIA_ROOT à télécharger sur ce qui existe sur votre système de fichiers local. Vérifiez ce qui est renvoyée par la fonction get_upload_file_name et vérifier que c'est un sous-répertoire de MEDIA_ROOT (défini dans settings.py) sur votre système de fichiers local:

class Image(models.Model): 
    image = models.FileField(upload_to=get_upload_file_name, default="") 

Voir ici:

https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.FileField.upload_to

+0

La racine des médias est: \t racine_support = 'Utilisateurs/Rebecca/Documents/FINALYEAR/CSbackup/MyActionDefiner3 - 2tblWorking - Copier/MyActionDefiner2/app/statique' et getUploadFileName: \t def get_upload_file_name (par exemple, le nom de fichier): \t \t retour "Uploaded_files /% S_% s" % (str (timezone.now()). remplacer (' '' _'), nom de fichier) \t \t Uploaded_files est un sous-répertoire du chemin d'origine. Le téléchargement du fichier a fonctionné lorsque j'ai créé le formulaire de téléchargement d'un fichier, mais maintenant il obtient des erreurs lors de la soumission de deux formulaires ensemble – RebeccaRol

+0

C:/in MEDIA_ROOT vous manque? Essayez MEDIA_ROOT = 'C:/Utilisateurs/Rebecca/Documents/FINALYEAR/CSbackup/MyActionDefiner3 - 2tblWorking - Copier/MyActionDefiner2/app/static' – sean

+0

Vérifiez également ce que str (timezone.now()) renvoie. N'est-ce pas quelque chose comme 2016-01-29 11: 19: 42.897000 + 00: 00?Votre chemin de téléchargement contiendra alors des caractères comme +: ce qui le rendrait invalide. Essayez str (timezone.now(). Date()) – sean