用户如何将文件上传到Django模型中?
有了这些代码,我希望每个用户都能够在自己的模型中上传自己的文件 forms.py:用户如何将文件上传到Django模型中?,django,Django,有了这些代码,我希望每个用户都能够在自己的模型中上传自己的文件 forms.py: class sp_UserNewOrderForm(forms.Form): file= forms.FileField() models.py: class sp_Order(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE) def __str__(self): retur
class sp_UserNewOrderForm(forms.Form):
file= forms.FileField()
models.py:
class sp_Order(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.owner.username
class sp_OrderDetail(models.Model):
order = models.ForeignKey(sp_Order, on_delete=models.CASCADE)
file= models.FileField()
def __str__(self):
return self.order.owner.username
views.py:
@login_required
def add_user_order(request):
new_order_form = sp_UserNewOrderForm(request.POST or None)
if new_order_form.is_valid():
order = sp_Order.objects.filter(owner_id=request.user.id).first()
if order is None:
order = sp_Order.objects.create(owner_id=request.user.id)
file= new_order_form.cleaned_data.get('file')
order.sp_orderdetail_set.create(file=file)
# todo: redirect user to user panel
# return redirect('/user/orders')
return redirect('/')
return redirect('/')
HTML:
{%csrf_令牌%}
{{form.count}
上传
但这些代码并不创建模型。问题是什么?问题似乎在这行:
order=sp\u order.objects.filter(owner\u id=request.user.id).first()
我认为您应该将owner\u id=request.user.id
替换为owner=request.user
owner\u id
不是您试图筛选或创建的模型的属性在为POST
请求实例化表单时,您需要包含request.FILES
def添加用户订单(请求):
如果request.method==“POST”:
new\u order\u form=sp\u UserNewOrderForm(request.POST,request.FILES)
如果新订单表格有效():
order=sp\u order.objects.filter(owner\u id=request.user.id).first()
如果订单为无:
order=sp\u order.objects.create(owner\u id=request.user.id)
file=new\u order\u form.cleaned\u data.get('file'))
order.sp\u orderdetail\u set.create(file=file)
#todo:将用户重定向到用户面板
#返回重定向(“/user/orders”)
返回重定向(“/”)
它仍然不会将文件上载到模型
<form method="post" action="/add_sp">
{% csrf_token %}
{{ form.count }}
<button type="submit" class="btn btn-primary container">
upload
</button>
</form>