2012-11-16 10 views
6

Mam problem z otwarciem pliku tekstowego w django, który jest przechowywany w mojej bazie danych. Chcę uzyskać do niego dostęp za pośrednictwem FileField mojego modelu ... model wygląda takjak zdobyć (txt) zawartość pliku z FileField?

class MyModel(models.Model): 
     saved_file = FileField() 

przesłać plik testowy za pośrednictwem interfejsu administratora, który działa OK. Moim zdaniem chcę uzyskać dostęp do tego pliku. Jeśli otworzyć go ze standardowym pytona open() działa ok ...

f = open(path, 'r') 
a = f.readlines() 
return render_to_response('base.html', {'content': a}, context_instance=RequestContext(request)) 

ten wyświetla linie pliku ok ... według https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield dostaje proxy FieldFile gdy FileField z modelu nazywa, tak

f = MyModel.objects.all().get(id=0).saved_file 

należy przechowywać FieldFile wf, ponadto dokumentacja wskazuje, że jeden otwiera plik z modelem oddając .Open (mode = 'rb') w FieldFile, więc

file = f.open(mode='rb') 

powinien działać jak python .open(), jak podano w dokumentacji. Tak więc, aby uzyskać linie, wykonuję

file.readlines() 

powinien zwrócić mi listę linii. To, co się dzieje, to błąd, który mówi, że atrybut .readlines() nie istnieje. Nie potrzebuję pliku, aby go wyświetlić, jest to po prostu sposób sprawdzenia, czy otwarcie pliku działa, ale potrzebuję zawartości pliku w zmiennej w moim widoku, aby dalej używać go w mojej logice biznesowej. Czy ktoś może sugerować sposób, aby uzyskać zawartość pliku z FileField frem model?

+0

Co to jest pełne śledzenie twojego "AttributeError"? –

Odpowiedz

5

FieldFile.open otwiera plik, ale niczego nie powrócić. Więc w twoim przykładzie file jest None.

Należy zadzwonić readlines na FieldFile. W twoim przykładzie będzie to:

f = MyModel.objects.all().get(id=0).saved_file 
f.open(mode='rb') 
lines = f.readlines() 
f.close() 
Powiązane problemy