я начинающий Джанго (Джанго 1.2.5)
У меня есть эта модель:
class Document(models.Model):
file = models.FileField(upload_to='documents/%Y/%m/%d', null=True, blank=True)
title = models.CharField(max_length=30)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User)
#other fields
#other fields
и модель для этого:
class DocumentForm(ModelForm):
file = forms.FileField(required=True, error_messages={'required' : 'required!','empty': "empty!"})
title = forms.CharField(widget = forms.TextInput(attrs={'size': 93,}), error_messages={'required': 'required!'})
#other fields
#other fields
class Meta:
model = Document
exclude = ('author',)
def save(self, author, commit=True):
document=ModelForm.save(self,commit=False)
document.author = author
if commit:
document.save()
return document
Я загружаю новые документы, используя DocumentForm выше, и это работает довольно красиво, но когда я пытаюсь отредактировать какой-то документ, я не могу поместить новый файл на место предыдущим. Я могу изменить все поля, кроме FileField.
def document_edit(request, document_id):
doc = get_object_or_404(Document, id=document_id)
form = DocumentForm(instance=doc)
if doc.author == request.user:
if request.method == "POST":
form = DocumentForm(request.POST, request.FILES, instance=doc)
if form.is_valid():
if request.POST.get('cancel'):
return HttpResponseRedirect('/')
elif request.POST.get('delete'):
document = Document.objects.get(id=document_id)
document.file.delete()
document.delete()
return HttpResponseRedirect('/')
else:
form.save(author=request.user)
return HttpResponseRedirect('/')
else:
# return again form with errors
else:
# return form with doc instance
else:
# return "you can't edit this doc!"
Я изучаю документацию по Django и знаю, что должен написать какой-то специальный метод сохранения в каком-то классе, но я совершенно не представляю, как мне это сделать. Это должен быть метод save () в Document () или в DocumentForm ()?
Как правило, я хочу это: Когда я помещаю путь к новому файлу в форме, я хочу переопределить этот новый файл вместо него и автоматически удалить предыдущий файл.
Вы можете мне помочь? Заранее спасибо!