Discussion:
upload obrazków w Django
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
tomek janukowicz
2006-06-28 17:16:35 UTC
Permalink
Witam serdecznie!
Zaczynam dopiero swoją przygodę z Django i proszę o wyrozumiałość ;).

Mam taki problem: chcę zrobić upload obrazków dodałem w modelu ImageField.
Generic views wyświetla mi stronę uploadu bez pola html file, tak samo jak
kożystam z domyślnych manipulatrów. Jeśli zmienię manipulator na custom i
dodam pole ImageUploadField przy dodawaniu do bazy rekkordu próbuje mi się
załadować binarna postać obrazka i wywala błąd. Kod jest oparty na
dokumentacji Django.

Chodzi mi żeby uploadować obrazek i do bazy danych dodać jego nazwę.

Proszę o Pomoc
ciukes
2006-06-29 09:35:44 UTC
Permalink
Post by tomek janukowicz
Witam serdecznie!
Zaczynam dopiero swoją przygodę z Django i proszę o wyrozumiałość ;).
Mam taki problem: chcę zrobić upload obrazków dodałem w modelu ImageField.
Generic views wyświetla mi stronę uploadu bez pola html file
Sprawdz nazwy pol w szablonie. pole do uploadu pliku nazywa sie
<nazwa_pola>_file.
Czyli:
* w modelu:
class Picture(models.Model):
...
picture = models.FileField("Real file for picture content",
upload_to="album", null=True)
...

* w szablonie:
...
<label for="id_picture_file">File:</label> {{ form.picture_file }}
...


Pozdrawiam,
ciukes.
tomek janukowicz
2006-06-29 11:16:59 UTC
Permalink
Post by ciukes
[ukryty zacytowany tekst]
Sprawdz nazwy pol w szablonie. pole do uploadu pliku nazywa sie
<nazwa_pola>_file.
...
picture = models.FileField("Real file for picture content",
upload_to="album", null=True)
...
...
<label for="id_picture_file">File:</label> {{ form.picture_file }}
...
Pozdrawiam,
ciukes.
Dzięki to działa po prostu robiłem {{ form.picture }} zamiast {{
form.picture_file}.
Stokrotne dzięki
Wiktor Grębla
2006-06-29 11:11:36 UTC
Permalink
Post by tomek janukowicz
Witam serdecznie!
Zaczynam dopiero swoją przygodę z Django i proszę o wyrozumiałość
To w sumie możemy sobie ręce podać :)
Post by tomek janukowicz
Mam taki problem: chcę zrobić upload obrazków dodałem w modelu
ImageField. Generic views wyświetla mi stronę uploadu bez pola html
file,
Jak pisał przedmówca, musisz w szablonie dać:

<label for="id_image">Image:</label> {{ form.image_file }}

for="id_pole z modelu"

(id_image_file też może być, nie chce mi się wnikać w to jak on
tworzy te formularze :))

Na co się więcej nadziałem... Na brak enctype="multipart/form-data"
w szablonie, pasowałoby też zwrócić uwagę na to czy POST nie
jest pusty jeśli tylko dodajemy plik i nie ma nic innego w formularzu
(co się chyba nie zdarza, ale mnie musiało się przytrafić ;), żeby
nie było, to w dokumentacji o tym piszą)

if request.POST or request.method == "POST":
# If data was POSTed, we're trying to create a new Place.
new_data = request.POST.copy()
new_data.update(request.FILES.copy())

No i chwile mi zajęło zanim wpadłem żeby skopiować FILES do danych z
formularza.

Ostatnie dziwne zachowanie, jeśli pole obrazka nie ma ustawione
null=True, to nie będzie działać walidacja. Uparcie pisze, że pole
nie może być Null (po zmianie, ścieżki do dodanych plików
wyświetlają się prawidłowo).
Post by tomek janukowicz
Chodzi mi żeby uploadować obrazek i do bazy danych dodać jego nazwę.
Wydumany z przykładu model, widok i szablon:

http://republika.pl/greblus/oth/models.py
http://republika.pl/greblus/oth/views.py
http://republika.pl/greblus/oth/add.html

Generalnie, nieco to magiczne, ale jak ktoś robi formularze na akord,
to pewnie mu się spodoba.

W.
--
question = ( to ) ? be : ! be;
-- Wm. Shakespeare
ciukes
2006-06-29 13:27:10 UTC
Permalink
Post by Wiktor Grębla
Ostatnie dziwne zachowanie, jeśli pole obrazka nie ma ustawione
null=True, to nie będzie działać walidacja. Uparcie pisze, że pole
nie może być Null (po zmianie, ścieżki do dodanych plików
wyświetlają się prawidłowo).
Tez to zauwazylem.

Nie potwierdzalem tego w zrodlach, ale wyglada jakby najpierw robil
insert rekordu do bazy z tym polem ustawionym na null, a potem wstwial
jego wartosc przez update.

Pozdrawiam,
ciukes.

Loading...