Найти - Пользователи
Полная версия: Проверка на дублирование при отправке формы
Начало » Django » Проверка на дублирование при отправке формы
1
Sashker
Добрый день.

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

Модель:
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-запросе и в БД, мне кажется излишне тернистым и неверным.

Прошу наставить меня на путь истины и в целом сказать, правилен ли такой подход, или надо рыть в другом направлении вообще.
fth
Sashker
В чем проблема, собственно - для конкретного сотрудника в один день должна быть одна запись.
http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together
Но есть косяк, форма почему-то этого не учитывает, просто выкидывает ошибку при попытке сохранения.
Можно отлавливать эту ошибку или же использовать свою валидацию форм:
http://docs.djangoproject.com/en/dev/ref/forms/validation/
zili
Я бы сделал проверку на уровне Javascript, ajax'ом передал данные для проверки.
fth
zili
Я бы сделал проверку на уровне Javascript, ajax'ом передал данные для проверки.
Ага, только это никоим образом не отменяет необходимость проверки данных на сервере. И это очень плохой знак, когда разработчик забывает об этом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB