1

我有一个类似的问题: how to manual assign imagefield in Django

除了我的文件来自远程主机并且我只得到一个 url,所以类似于:

class Book(models.Model):
    name = models.CharField()
    url = models.URLField()
    file = models.FileField(null=True, blank=True, editable=False)

class BookForm(forms.ModelForm):
    class Meta:
        model = Book

def view(request):
    if request.POST:
        form = BookForm()
        if form.is_valid():
            request = form.instance.source_url
            try:
                f = urlopen(request)
                # ...create open file obj...
                form.instance.local_file.save(form.instance.ref, f.read(), True)

            except Exception:
                print 3

在这种情况下我应该如何f变成一个打开的文件对象,以便我可以保存它的内容?

4

1 回答 1

3

使用requests它是微不足道的。

import requests
from StringIO import StringIO

r = requests.get(file_url)
f = StringIO(r.content)

# f.read()

最后,正如所写的那样,您的代码在重新分配时会导致问题request,这是传入的。您应该将此行更改request = form.instance.source_url为其他内容,例如file_url = from.instance.source_url.

于 2012-06-16T15:10:44.637 回答