2018-11-22 Django 上传文件

    <div class="modal fade" id="modal-add-family">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">添加家系</h4>
                </div>
                <div class="modal-body">
                    <div class="box-body">
                        <form class="form-horizontal" action="/app/add_family/" method="post"
                              enctype="multipart/form-data">
                            {% csrf_token %}
                            <div class="form-group">
                                <label class="col-sm-2 control-label">编号</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" name="number"
                                           placeholder="系统编号">
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">家系名称</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" name="name" required="required"
                                           placeholder="家系名称">
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">家系图</label>
                                <div class="col-sm-10">
                                    <input type="file" class="form-control" name="file" required="required">
                                    <p class="help-block">请点击按钮上传家系图</p>
                                </div>
                            </div>
                            <input type="submit" value="Submit" class="hidden" id="add_submit"/>
                        </form>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">取消</button>
                    <button type="submit" class="btn btn-primary" id="add_item">添加</button>
                </div>
            </div>
        </div>
    </div>

后台接收:

@require_POST
@login_required(login_url='/app/login')
def add(request):
    number = request.POST.get("number", None)
    name = request.POST.get("name", None)
    file = request.FILES.get("file", None)
    if not name or not file:
        message = "请完善上传信息"
    else:
        try:
            family = Family(number=number, name=name, image=file)
            family.save()
            message = "添加家系成功!"
        except:
            message = "添加家系失败!"
    s = SampleList()
    return s.get(request, message=message)

Model:

def family_directory_path(instance, filename):
    maxid = max(obj.id for obj in FilePath.objects.all())
    prefix = FilePath.objects.get(id=maxid).path
    return '{0}/family/{1}/{2}'.format(prefix, instance.pk, filename)


class Family(Base):
    class Meta:
        verbose_name = '家系信息'
        verbose_name_plural = '家系信息'

    def __str__(self):
        return f'{self.pk} - {self.name}'

    def natural_key(self):
        return self.name

    number = models.CharField(max_length=64, blank=True, null=True, verbose_name='编号')
    name = models.CharField(max_length=64, blank=True, null=True, verbose_name='名称')
    image = models.ImageField(upload_to=family_directory_path, blank=True, null=True, verbose_name='家系图')
    family_disease = models.ForeignKey(FamilyDisease, blank=True, on_delete=models.SET_NULL, null=True, verbose_name='家族病史')
    family_disease_abstract = models.TextField(blank=True,null=True,verbose_name='家族病史描述')

注意点-- <form enctype="multipart/form-data"> 这里一定要写, 否则提交的只是文件名, 而且不在 FILES 里面 而是放在了 POST 里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值