Sto fraintendendo qualcosa! Se il mio modello non è stato salvato, non ha un ID associato. Quindi, se ho qualcosa di simile:l'istanza di un modello dà id = None Django
views.py
(l'inserimento o la modifica di informazioni esistente utilizza la stessa ModelForm)
def insert_or_modify(request, id=None):
if id is not None:
book = BookModel.objects.get(pk=id)
else:
book = BookModel()
if request.method == 'POST':
form = BookInfoForm(request.POST, request.FILES, instance=book)
if form.is_valid():
form.save()
....
return render_to_response(...)
Ho anche un'immagine e utilizzare upload_to per l'ImageField. Ci sono due problemi: id è None e non sono sicuro di come manipolare/salvare lo instance=book
in modo da ottenere effettivamente un ID. Il secondo problema è che la posizione in cui salvo i miei dati non è disponibile. Anche se il tag template book.img.url
ha la posizione desiderata del libro a http:127.0.0.1:8000/folder1/media/id/
, la posizione attuale è da qualche altra parte:
Dove voglio salvare la mia immagine a:
/project/folder1/media/id/
dove id
è il libro id.
Quello che realmente ottenere:
/project/id/
(Ma 'id' diventa 'None' dal momento che non esiste!)
Il mio codice precedente ha funzionato. Salverebbe nella posizione corretta, ma con questo codice attuale, non funziona. Quindi il problema del salvataggio non sembra essere dovuto a settings.py dato che ha funzionato in precedenza.
EDIT: rimosso non il codice dal codice formattazione zona
EDIT: ho scoperto il motivo per cui io non stavo salvando nella posizione corretta. Come si è scoperto, ho dimenticato di decommentare qualcosa quando ho modificato l'ultima volta settings.py. Salvare nella posizione funziona ora! Scusate ragazzi!
EDIT: Penso che id = Nessun problema è causato da form.save(). Se evito di farlo e salvo salvare direttamente il modello, non ho questo problema.
Grazie! Sì, ho provato qualcosa di simile. Sta ancora creando la cartella None, ma questa volta sta anche creando la cartella id. Ad esempio, se faccio 'save_book.img.save ('img', request.FILES ['img'])', l'img verrà salvata in/None e/1. – sharkfin