小编tuf*_*der的帖子

django通过HttpResponse返回文件 - 文件未正确提供

我想在HttpResponse中返回一些文件,我正在使用以下函数.返回的文件总是有1kb的文件大小,我不知道为什么.我可以打开文件,但似乎没有正确提供.因此,我想知道如何通过HttpResponse使用django/python返回文件.

@login_required
def serve_upload_files(request, file_url):
    import os.path
    import mimetypes
    mimetypes.init()

    try:
        file_path = settings.UPLOAD_LOCATION + '/' + file_url
        fsock = open(file_path,"r")
        #file = fsock.read()
        #fsock = open(file_path,"r").read()
        file_name = os.path.basename(file_path)
        file_size = os.path.getsize(file_path)
        print "file size is: " + str(file_size)
        mime_type_guess = mimetypes.guess_type(file_name)
        if mime_type_guess is not None:
            response = HttpResponse(fsock, mimetype=mime_type_guess[0])
        response['Content-Disposition'] = 'attachment; filename=' + file_name            
    except IOError:
        response = HttpResponseNotFound()
    return response
Run Code Online (Sandbox Code Playgroud)

编辑:这个bug实际上不是一个bug ;-)

此解决方案正在Apache服务器上进行生产,因此源可以.

在写这个问题时,我用django开发服务器在本地测试它,并想知道为什么它不起作用.我的一个朋友告诉我,如果服务器中没有设置mime类型,可能会出现此问题.但他不确定这是不是问题.但有一件事是肯定的..它与服务器有关.

django filestream

14
推荐指数
2
解决办法
3万
查看次数

Django:在管理表单之外使用ForeignKeyRawIdWidget

我试图找到一些如何在我自己的表单中使用ForeignKeyRawIdWidget的文档.目前我一直收到错误," init()至少需要2个非关键字参数(给定1个)",这对我没有任何意义.

非常感激任何的帮助.谷歌搜索这个很少但是开发对话并没有我能找到如何实现它的例子.

更新:这已解决; 见下面的解决方案

forms django admin widget

8
推荐指数
1
解决办法
3134
查看次数

从FormData对象填充HTML表单

是否可以存储表单的FormData对象,然后使用该FormData对象将存储的FormData值重新填充回表单?

例如: HTML

<form id="test_form">
  <input type="text" name="last_name" placeholder="Last Name"/><br/>
  <input type="text" name="first_name" placeholder="First Name"/><br/>
  <input type="date" name="date_of_birth" placeholder="Date of Birth"/><br/>
</form>
Run Code Online (Sandbox Code Playgroud)

使用Javascript

var f = document.getElementById('test_form');
var data = FormData(f);
...
// mythical function to translate FormData back into form values
f.values(data);
Run Code Online (Sandbox Code Playgroud)

html javascript html5 ecmascript-6

7
推荐指数
1
解决办法
3185
查看次数

jsTree对象没有方法addBack

这是我的jsTree实例化代码.

$("#folder_tree").jstree({
    "themes" : {
        "theme" : "default",
        "dots" : true,
        "icons" : true
    },
    "json_data" : {
        "ajax" : {
            "url" : "/portal/folders",
            "data" : function(n) {
                if ($(n[0]).find("a").attr("id")) {
                    console.log($(n[0]).find("a").attr("id").split('_')[1]);
                    return {
                        "id" : $(n[0]).find("a").attr("id").split('_')[1]
                    };
                }
                return { "id" : "0" };
            }
        }
    },
    "plugins" : [ "themes", "json_data", "ui", "contextmenu", "dnd", "search", "crrm" ]
}).bind("select_node.jstree", function(e,data) {
    console.log(data.rslt.obj.context.id);
});
Run Code Online (Sandbox Code Playgroud)

它在第一次加载(0大小写)时正确加载数据,但是当我单击以展开任何文件夹时,它会给我错误:

Uncaught TypeError: Object [object Object] has no method 'addBack' 
Run Code Online (Sandbox Code Playgroud)

即使已将扩展节点的正确ID记录到控制台,并且正确地向服务器发出了ajax请求.另请注意,我必须使用相当可怕的kludge来查找元素的id,因为在尝试访问时,记录的代码只会产生错误(我使用与文档相同的jsTree版本)n.attr("id").另外,在bind("select_node"...我必须使用未记录的函数再次找到id.经过几个小时的故障排除后,我仍然感到困惑,但有些事情显然无法正常运行.

javascript jquery jstree

4
推荐指数
1
解决办法
3746
查看次数

Django:保存后访问 ManyToManyField 对象

这让我很困惑......当我保存我的模型时,书对象没有改变。但是,如果我打开发票并再次保存,则会进行更改。我究竟做错了什么?

class Invoice(models.Model):
    ...
    books = models.ManyToManyField(Book,blank=True,null=True)
    ...

    def save(self, *args, **kwargs):
        super(Invoice, self).save(*args, **kwargs)
        for book in self.books.all():
            book.quantity -= 1
            if book.quantity == 0:
                book.sold = True;
            book.save()
Run Code Online (Sandbox Code Playgroud)

编辑:我试过使用 post_save 信号,但它的工作方式相同。第一次保存时没有更改,第二次保存更改。

更新:似乎可以通过以下代码解决:

class InvoiceAdmin(admin.ModelAdmin):
    ...

    def save_model(self, request, obj, form, change):
        obj.save()
        for bk in form.cleaned_data['books']:
            book = Book.objects.get(pk=bk.id)
            book.quantity -= 1
            if book.quantity == 0:
                book.sold = True;
            book.save()
Run Code Online (Sandbox Code Playgroud)

django many-to-many save m2m

3
推荐指数
1
解决办法
3136
查看次数

设置Order By以忽略每列的标点符号

是否可以通过包含类似字符的标题字段来命令PostgreSQL查询的结果,[](),;但这样做是否忽略这些标点字符并仅按文本字符排序?

我已经阅读了有关更改数据库排序规则或区域设置的文章,但没有找到关于如何在每个列的现有数据库上执行此操作的任何明确说明.这甚至可能吗?

postgresql collation sql-order-by postgresql-9.1

1
推荐指数
1
解决办法
1854
查看次数

自定义 Wagtail 流场

任何人都可以提供创建在 wagtail.io 网站首页上预览的 Wagtail Streamfield 选项所需的代码吗?

https://media.wagtail.io/images/w1_5pmaP1U.original.width-1600.png

具体来说,我对 Aligned Image、Wide Image、Bustout、Raw HTML 和 Markdown 感兴趣。

django wagtail wagtail-streamfield

1
推荐指数
1
解决办法
966
查看次数

Python 上的 Elasticsearch DSL 无法生成分数

我有一个 Elasticsearch 数据库,其中包含多个字段,其中可以包含名称信息,并尝试像这样搜索它:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search

client = Elasticsearch()
s = Search(using=client, index="names")
query = 'smith'
fields = ['name1', 'name2']

results = s.query("multi_match", query=query, fields=fields, fuzziness='AUTO')

for hit in results.scan():
    print(hit.meta.score)
Run Code Online (Sandbox Code Playgroud)

结果是:

None
None
None
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我手动构建它:

results = client.search(index="names",
    body={"size": 100, "query":{
        "multi_match": {
            "query": query, "fields": fields, "fuzziness": 'AUTO'
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

我的结果是:

{'_index': 'names', '_type': 'Name1', '_id': '1MtYSW4BXryTHXwQ1xBS', '_score': 14.226202, '_source': {...}
{'_index': 'names', '_type': 'Name1', '_id': 'N8tZSW4BXryTHXwQHBfw', '_score': 14.226202, '_source': {...} …
Run Code Online (Sandbox Code Playgroud)

python elasticsearch elasticsearch-dsl elasticsearch-dsl-py

1
推荐指数
1
解决办法
1855
查看次数