Django

Django — свободный фреймворк для веб-приложений на языке Python

  • You are not logged in.

#1 Aug. 24, 2010 22:45:45

vladka
Registered: 2010-08-24
Posts: 1
Reputation: +  0  -
Profile   Send e-mail  

Формы, необходим update вместо insert

Всем доброго дня

Я новичек в django и появились некоторые вопросы, связанные с механизмом работы форм.

Допустим у нас есть модель UserProfile с 6тью полями.
Есть основное меню в котором мы редактируем 5ть параметров
и допольнотельное в котором мы редактируем 6й параметр, например биографию.
(Основные Настройки | Биография )

При нажатии сохранить в меню биография в sql происходит insert для таблицы UserProfile, вместо update, который есствественно завершаеться неудачей.

Подскажите как быть в таком случае, если ли какой-то механизм, который будет проверять - если указан\передан первичный ключ - то пропбывать выполнить update, а только потом уже insert ?

либо сделать банально:
userprofile = UserProfile.fileter(id=POST['id'])
Userprofile[0].bioraphy = POST['biography']
Userprofile[0].save()

Форма:
class BiographyForm(forms.ModelForm):
pk = forms.IntegerField(labelu'Повторите Емайл: '), widget=forms.widgets.HiddenInput())
biography = forms.CharField(labelu'Биография'), initial='Введите вашу биографию', widget=forms.widgets.Textarea())

class Meta:
model = UserProfile
fields = ('pk', 'biography' )

заранее спасибо за ответ.


Edited vladka (Aug. 24, 2010 22:46:21)

Offline

#2 Aug. 26, 2010 20:57:10

fenume
Registered: 2010-08-26
Posts: 1
Reputation: +  0  -
Profile   Send e-mail  

Формы, необходим update вместо insert

Вы можете видеть в данном примере, что метод save() установит значения для всех полей, не только для name. Если в вашем случае, остальные поля могут изменяться другими процессами, правильнее будет изменять толькополя, которые этого требуют. Для этого следует использовать метод update() объектов QuerySet. Пример:

>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')

SQL код будет более эффективным и не сможет вызвать «гонки»:

UPDATE books_publisher
SET name = 'Apress Publishing'
WHERE id = 52;

Метод update() имеется у каждого QuerySet и это означает, что вы можете изменять множество записей за раз. Вот так вы можете изменить в поле country значение «U.S.A.» на «USA» для каждой записи Publisher:

>>> Publisher.objects.all().update(country='USA')
2

Метод update() вернул значение — целое, представляющее количество изменённых записей.

http://djbook.ru/

Edited fenume (Aug. 26, 2010 20:57:32)

Offline

Board footer

Moderator control

Powered by DjangoBB