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