Найти - Пользователи
Полная версия: Проверка на существование записи в БД
Начало » Django » Проверка на существование записи в БД
1 2
kvadrat
Есть модель вот такая:

class Entry1 (models.Model):
user = models.ForeignKey(MyUser)
line = models.CharField(max_length=64)
textblock = models.TextField()
мне нужно что бы при создании записи происходила проверка - создавал ли уже юзер запись с таким line, если, да указать ему на это. я нашел как примерно это на языке mysql делается. как это сделать во вьюхе?
Sergei
например Entry1.objects.filter(user=user_we_check, line=line_we_check).exists()
если нужно еще и проверить, сколько таких записей - вместо exists() ставьте count()
kvadrat
if Entry1.objects.filter(user=user_we_check, line=line_we_check).exists() вернет treue/false ?
Sergei
ага, exists() вернет булево True, если хоть одна запись есть.
Но с точки зрения задачи - вы подумайте, нужно ли так делать.
Возможно, вам выгоднее просто сделать user и line unique_together,
и при записи сделать try/except.
“Выгоднее” - в смысле на одно обращение к базе меньше. С другой стороны, на один комбинированный индекс больше. В общем, вам виднее, что вам нужнее :)
kvadrat
спасибо. успел довольно опьянеть уже не могу проанализировать на практике ваш ответ) еще вопрос.
с большой вероятностью (такая специфика приложения в этом месте)юзер попытается создать запись с уже существующим line который будет в одной из последних записей. думаю это расхожая ситуация. возможнокак то уговорить бд искасть записи начиная с последней? наверное копейки но все же
crazyman2004
line = models.CharField(max_length=64)
почему бы не поставить этому полю проверку на уникальность?
Sergei
> создавал ли уже юзер запись с таким line
проверка на уникальность только line приведет к тому, что из оригинального требования нужно будет исключить слово “юзер”
akava
Sergei, что мешает повесить констрэйнт на два поля?
https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together
  class Meta:
    unique_together = ('user', 'line',)
Sergei
да ничего не мешает, я это автору вопроса как вариант в 4-м комментарии и написал,
пусть решает, если его дополнительный индекс устраивает, нормальное решение.
akava
Ну да, теперь понятно что ты имел ввиду под словом индекс
В “моей” терминологии это не индекс, а констрэйнт)))
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