3

Example:

class Author(models.Model): first_name = models.CharField() last_name = models.CharField() def _get_full_name(self): return '{0} {1}'.format(self.first_name, self.last_name) full_name = property(_get_full_name) 

What's the recommended way of putting a unique constaint on the full_name? Was thinking of overwriting save but maybe there are better solutions?

1

2 Answers 2

4

Take a look at the Meta class option unique_together

You could do it this way:

class Author(models.Model): first_name = models.CharField() last_name = models.CharField() def _get_full_name(self): return '{0} {1}'.format(self.first_name, self.last_name) full_name = property(_get_full_name) class Meta: unique_together = ("first_name", "last_name") 

The advantage is that this is enforced at the DB level with the proper UNIQUE SQL statements.

Sign up to request clarification or add additional context in comments.

1 Comment

It is probably the solution required, but there are edge cases that this won't pick up as a conflict: "'bob' 'brown smith'" and "'bob brown' 'smith'". Full name is the same, but last_name and first_name are different.
2

unique_together

unique_together = ("first_name", "last_name")

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.