Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Проверка на дублирование при отправке формы [RSS Feed]

#1 Апрель 25, 2011 08:23:46

Sashker
От:
Зарегистрирован: 2010-10-03
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка на дублирование при отправке формы

Добрый день.

Тестовая задача состоит в учете отработанного времени сотрудника и построении таблицы-табеля.

Модель:

class Callboard(models.Model):
"""Табель"""
user = models.ForeignKey(User, verbose_name="Сотрудник")
count_of_hours = models.IntegerField(max_length=1,
verbose_name="Количество отработанных часов")
date_of_day = models.DateField(verbose_name="День недели")

def __unicode__(self):
return str(self.date_of_day) + " " + str(self.user)
Форма:
class UserModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
# Возвращает строку в заданном виде: "Имя Фамилия (логин)"
return "%s (%s)"%(obj.get_full_name(), obj.username)

class CallboardForm(ModelForm):
user = UserModelChoiceField(User.objects.all().order_by('first_name'), label="Сотрудник")
class Meta():
model = Callboard
В чем проблема, собственно - для конкретного сотрудника в один день должна быть одна запись. Как я понимаю, какое-либо поле уникальным сделать не получится, поэтому нужна проверка на то, есть ли уже запись для этой даты в базе.

Форма отправляет мне POST-запрос в таком виде: <QueryDict: {u'date_of_day': , u'user': , u'count_of_hours': }>.
Если форма is_valid, я запрашиваю все объекты Callboard.odjects.all() и в цикле хочу проверить, есть ли уже запись для данного сотрудника и даты.

Видимо, я не знаю механизма, который позволяет автоматически производить данные действия, потому что путь приведения типов(id сотрудника к INT, а даты к datetime.date) для данных в POST-запросе и в БД, мне кажется излишне тернистым и неверным.

Прошу наставить меня на путь истины и в целом сказать, правилен ли такой подход, или надо рыть в другом направлении вообще.



Офлайн

#2 Апрель 26, 2011 09:43:44

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка на дублирование при отправке формы

Sashker
В чем проблема, собственно - для конкретного сотрудника в один день должна быть одна запись.
http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together
Но есть косяк, форма почему-то этого не учитывает, просто выкидывает ошибку при попытке сохранения.
Можно отлавливать эту ошибку или же использовать свою валидацию форм:
http://docs.djangoproject.com/en/dev/ref/forms/validation/



Офлайн

#3 Май 10, 2011 00:37:56

zili
От:
Зарегистрирован: 2010-05-19
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка на дублирование при отправке формы

Я бы сделал проверку на уровне Javascript, ajax'ом передал данные для проверки.



Офлайн

#4 Май 10, 2011 15:27:46

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка на дублирование при отправке формы

zili
Я бы сделал проверку на уровне Javascript, ajax'ом передал данные для проверки.
Ага, только это никоим образом не отменяет необходимость проверки данных на сервере. И это очень плохой знак, когда разработчик забывает об этом.



Отредактировано (Май 11, 2011 10:02:53)

Офлайн

  • Начало
  • » Django
  • » Проверка на дублирование при отправке формы[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version