Skip to content Skip to sidebar Skip to footer

How Can I Set The Field Unique In Django?

I have a model class: class PysicalServer(models.Model): serial_number = models.CharField(max_length=64) # I want to add the unique name = models.CharField(max_length=16)

Solution 1:

just add unique=Trueserial_number = models.CharField(max_length=64, unique=True) see more information here https://docs.djangoproject.com/en/1.11/ref/models/fields/#unique

Solution 2:

The key word unique=True makes the title CharField unique.

classBook(models.Model):
    title= models.CharField(max_length=300, unique=True)

    def__str__(self):
        return self.title

http://www.learningaboutelectronics.com/Articles/How-to-make-a-database-table-field-unique-in-Django.php

Solution 3:

As mentioned by the other stackoverflowers above, you can use unique=True. but mind you that this won't work if you want to set a joined unique constraint. For example, if you want a combination of fields to be unique, then you should use models.UniqueConstraint as seen below

classBook(models.Model):
    title = models.CharField(max_length=300)
    sub_title = models.CharField(max_length=300)

    classMeta:
        constraints = [
            models.UniqueConstraint(fields=['title', 'sub_title'], name="%(app_label)s_%(class)s_unique")
        ]

    def__str__(self):
        returnself.title

Solution 4:

If you are looking for a unique case insensitive, then do this.

example "my NamE is John" and "MY naME is jOHN" should match and will not work to have 2,

because if you write "my NamE is John" it will become "My name is john".

and "MY naME is jOHN" will also become "My name is john".


models.py

1. add this code to the top.

capitalizeFirstChar = lambda s: s[:1].upper() + s[1:]

2. Then here is an example how to use it.

classMyModel(models.Model):
        name = models.CharField(max_length=255, unique=True)
    
        def__str__(self):
            return self.name
    
# The save method to convert your text "MY naME is jOHN" to "My name is john"defsave(self, force_insert=False, force_update=False):
            self.name = self.name.lower()
            self.name = capitalizeFirstChar(self.name)
    
            # If the name already existsifnot Category.objects.filter(name__iexact=self.name).exists():
                super(Category, self).save(force_insert, force_update)

This solution sucks if you don't want the characters to change in capitalisation.

Post a Comment for "How Can I Set The Field Unique In Django?"