How do you check if first and last name are unique only on creation?
up vote
0
down vote
favorite
I have the following model:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
and I have the following form:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['short_name', 'long_name']
Right now I am using this form for both update and create.
I would like this form to raise ValidationError if someone is trying to create a Person with the same short_name and long_name.
However, I do not want to raise an exception if a user is modifying an existing user's data.
I have thought about writing a clean method to check if Person.objects.filter(long_name=X, short_name=Y).count()
returns anything but this condition incorrectly fails when I am modifying an existing instance.
How would you change this?
django forms
add a comment |
up vote
0
down vote
favorite
I have the following model:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
and I have the following form:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['short_name', 'long_name']
Right now I am using this form for both update and create.
I would like this form to raise ValidationError if someone is trying to create a Person with the same short_name and long_name.
However, I do not want to raise an exception if a user is modifying an existing user's data.
I have thought about writing a clean method to check if Person.objects.filter(long_name=X, short_name=Y).count()
returns anything but this condition incorrectly fails when I am modifying an existing instance.
How would you change this?
django forms
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have the following model:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
and I have the following form:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['short_name', 'long_name']
Right now I am using this form for both update and create.
I would like this form to raise ValidationError if someone is trying to create a Person with the same short_name and long_name.
However, I do not want to raise an exception if a user is modifying an existing user's data.
I have thought about writing a clean method to check if Person.objects.filter(long_name=X, short_name=Y).count()
returns anything but this condition incorrectly fails when I am modifying an existing instance.
How would you change this?
django forms
I have the following model:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
and I have the following form:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['short_name', 'long_name']
Right now I am using this form for both update and create.
I would like this form to raise ValidationError if someone is trying to create a Person with the same short_name and long_name.
However, I do not want to raise an exception if a user is modifying an existing user's data.
I have thought about writing a clean method to check if Person.objects.filter(long_name=X, short_name=Y).count()
returns anything but this condition incorrectly fails when I am modifying an existing instance.
How would you change this?
django forms
django forms
asked Nov 9 at 2:48
Sparrowcide
1,08711331
1,08711331
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
1
down vote
You can do this by using unique_together
as illustrated here in the django documentation at the model level
add a comment |
up vote
1
down vote
An existing instance is one that has a value for pk
. So just check for that in your clean()
method:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
You can do this by using unique_together
as illustrated here in the django documentation at the model level
add a comment |
up vote
1
down vote
You can do this by using unique_together
as illustrated here in the django documentation at the model level
add a comment |
up vote
1
down vote
up vote
1
down vote
You can do this by using unique_together
as illustrated here in the django documentation at the model level
You can do this by using unique_together
as illustrated here in the django documentation at the model level
answered Nov 9 at 3:03
robotHamster
343115
343115
add a comment |
add a comment |
up vote
1
down vote
An existing instance is one that has a value for pk
. So just check for that in your clean()
method:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
add a comment |
up vote
1
down vote
An existing instance is one that has a value for pk
. So just check for that in your clean()
method:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
add a comment |
up vote
1
down vote
up vote
1
down vote
An existing instance is one that has a value for pk
. So just check for that in your clean()
method:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
An existing instance is one that has a value for pk
. So just check for that in your clean()
method:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
answered Nov 9 at 7:28
Kevin Christopher Henry
22k46359
22k46359
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219148%2fhow-do-you-check-if-first-and-last-name-are-unique-only-on-creation%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown