gpt4 book ai didi

python - 从 2 个模型创建表单 python django : [Errno 2] No such file or directory

转载 作者:太空宇宙 更新时间:2023-11-03 17:00:08 25 4
gpt4 key购买 nike

我正在尝试使用 python 和 django 从 2 个模型创建一个表单。下面显示了我的模型:

# 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)

和表单类:

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']

View 中从 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 })

表单模板:

<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>

访问页面时表单显示正常,但是提交后我收到此错误:

[Errno 2]没有这样的文件或目录

它似乎不喜欢这行:

act.action_id = form2.save()

创建的模型肯定具有我所指的所有字段,尽管我收到此错误,但前半部分(ActionForm)保存到数据库中,但不是 imageForm。一些帮助将不胜感激!

编辑

错误:

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

回溯

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

最佳答案

您需要指定要上传到本地文件系统上存在的 MEDIA_ROOT 子目录。检查 get_upload_file_name 函数返回的内容,并检查它是否是本地文件系统上 MEDIA_ROOT(在 settings.py 中定义)的子目录:

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

看这里:

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

关于python - 从 2 个模型创建表单 python django : [Errno 2] No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com