Я что-то недопонимаю! Если моя модель не сохранена, у нее нет идентификатора, связанного с ней. Так что, если у меня есть что-то вроде этого:Форма экземпляра модели дает id = None Django
views.py
(вставки или редактирования существующей информации использует тот же 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(...)
У меня также есть изображение и использовать upload_to для ImageField. Есть две проблемы: id - None, и я не уверен, как манипулировать/сохранять instance=book
, чтобы я действительно получил идентификатор. Вторая проблема заключается в том, что местоположение, в котором я сохраняю свои данные, находится далеко. Даже при том, что шаблонный тег book.img.url
имеет нужное место книги в http:127.0.0.1:8000/folder1/media/id/
, фактическое место находится где-то еще:
Где я хочу сохранить мое изображение, чтобы:
/project/folder1/media/id/
где id
книга идентификатор.
То, что я на самом деле получить:
/project/id/
(А 'идентификатор' становится 'None', так как он не существует!)
Мой предыдущий код работал. Он сохранит в правильном месте, но с этим текущим кодом это не сработает. Поэтому проблема с сохранением не похоже, что это связано с параметрами settings.py, поскольку она работала ранее.
EDIT: удален не-код с кодом города, форматирование
EDIT: Я узнал, почему я не экономил на правильное место. Как оказалось, я забыл раскомментировать что-то, когда я в последний раз модифицировал settings.py. Сохранение местоположения теперь работает! Извините ребята!
EDIT: Я думаю, что проблема id = None вызвана form.save(). Если я избегу этого и просто сохраню модель напрямую, у меня нет этой проблемы.
Спасибо! Да, я пробовал что-то вроде этого. Он по-прежнему создает папку «Нет», но на этот раз он также создает папку id. Например, если я делаю 'save_book.img.save ('img', request.FILES ['img'])', img будет сохранен в/None и/1. – sharkfin