Ситуация : Наличие базы данных mysql с некоторыми данными. Для этого примера я использую только два поля; id и subject . id определяется как Integer с опцией * auto_increment *, тогда как subject - это просто обычный varchar. Код:
Модель
class AList(models.Model):
id=models.AutoField(primary_key=True, db_column='ID')
subject=models.CharField(max_length=200, db_column='SUBJECT')
class Meta:
db_table = u'alist'
Форма
class AForm(ModelForm):
class Meta:
model=AList
View :
def alistForm(request,a_id=None):
if a_id:
a=AList.objects.get(id=a_id)
form=AForm(instance=a)
else:
form=AForm(request.POST or None)
return render_to_response('aform.html',{'form':form},context_instance=RequestContext(request)
def alistPost(request):
form=AForm(request.POST or None)
if form.is_valid():
form.save()
Описание проблемы:
Когда форма отправляет новые данные в функцию alistPost, form.save () вставляет новую запись, как и должно быть. Но когда я редактирую уже существующую запись, она тоже вставляется как новая запись ... и не обновляется, как должно.
Попытка изменить идентификатор с AutoField на IntegerField меняет поведение: при изменении записи form.save () изменяет существующую, при попытке вставить новую запись происходит сбой, поскольку у него нет идентификатора.
Вопрос:
Нужно ли мне вручную получать новое значение ID из базы данных и заставлять Django использовать его для этой новой записи, или есть способ заставить Django автоматически определить, следует ли ему использовать INSERT или UPDATE?