用户如何将文件上传到Django模型中?

用户如何将文件上传到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

有了这些代码,我希望每个用户都能够在自己的模型中上传自己的文件

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