| 1629 | ) |
| 1630 | |
| 1631 | def unique_error_message(self, model_class, unique_check): |
| 1632 | opts = model_class._meta |
| 1633 | |
| 1634 | params = { |
| 1635 | "model": self, |
| 1636 | "model_class": model_class, |
| 1637 | "model_name": capfirst(opts.verbose_name), |
| 1638 | "unique_check": unique_check, |
| 1639 | } |
| 1640 | |
| 1641 | # A unique field |
| 1642 | if len(unique_check) == 1: |
| 1643 | field = opts.get_field(unique_check[0]) |
| 1644 | params["field_label"] = capfirst(field.verbose_name) |
| 1645 | return ValidationError( |
| 1646 | message=field.error_messages["unique"], |
| 1647 | code="unique", |
| 1648 | params=params, |
| 1649 | ) |
| 1650 | |
| 1651 | # unique_together |
| 1652 | else: |
| 1653 | field_labels = [ |
| 1654 | capfirst(opts.get_field(f).verbose_name) for f in unique_check |
| 1655 | ] |
| 1656 | params["field_labels"] = get_text_list(field_labels, _("and")) |
| 1657 | return ValidationError( |
| 1658 | message=_("%(model_name)s with this %(field_labels)s already exists."), |
| 1659 | code="unique_together", |
| 1660 | params=params, |
| 1661 | ) |
| 1662 | |
| 1663 | def get_constraints(self): |
| 1664 | constraints = [(self.__class__, self._meta.constraints)] |