Здравствуйте. Аргумент unique поля модели делает проверку на уникальность по всей таблице БД.
Как сделать, чтобы уникальность проверялась в этой же таблице БД в пределах одного пользователя?
class MyModel(models.Model): class Meta: unique_together = [('my_field', 'user_id'), ]
class MyModel(models.Model): user_id = models.ForeignKey(User) my_field = models.SomeStandartField() class Meta: unique_together = [('my_field', 'user_id'), ]
Lexanderтак нельзя, на основе unique_together создаются правила уникальности для SQL таблиц.
unique_together
Exception Type: IntegrityError Exception Value: columns owner_id, link are not unique
class BookMark(models.Model): category = models.ForeignKey(BookMarkCategory, verbose_name=_('Category')) owner = models.ForeignKey(User, verbose_name=_('Owner')) description = models.TextField(_('Description'), blank=True) link = models.CharField(_('Link'), max_length=150) priority = models.IntegerField(_('Priority')) looked_through = models.BooleanField(_('Looked trough')) publick = models.BooleanField(_('Public')) class Meta: unique_together = ('owner', 'link')
def create_bookmark(request): if request.POST: form = BookMarkForm(request.POST) if form.is_valid(): bookmark = form.save(commit=False) bookmark.owner = request.user bookmark.save() return redirect('show_bookmarks_list') else: form = BookMarkForm() return render(request, 'mybookmark/create_bookmark.html', dict(form=form))