killerbees
killerbees

Reputation: 209

UNIQUE constraint failed error in django

I have a little problem with my migrations in django project. I have a models.py file and after first migrations I had a idea to add new field exacly :

slug_kat = models.SlugField(max_length=255, unique=True, verbose_name='Odnośnik', default='')

And when I wrote python manage.py makemigrations the system shows me something like: Add field slug_kat to kategorie After that i wrote the command python manage.py migrate firmy and boom... the error:

django.db.utils.IntegrityError: UNIQUE constraint failed: firmy_kategorie.slug_kat

Here is my models.py file with new line slug_kat:

from django.db import models
from django.utils import timezone


class Kategorie(models.Model):
    glowna = models.CharField(max_length=150, verbose_name='Kategoria')
    slug_kat = models.SlugField(max_length=255, unique=True, verbose_name='Odnośnik', default='')

    class Meta:
        verbose_name='Kategoria'
        verbose_name_plural='Kategorie'

    def __str__(self):
        return self.glowna


class Witryna(models.Model):
    nazwa = models.CharField(default="", max_length=150, verbose_name = 'Nazwa strony')
    adres_www = models.CharField(max_length=70, verbose_name='Adres www')
    slug = models.SlugField(max_length=250, verbose_name='Przyjazny adres url')
    email = models.CharField(max_length=100, verbose_name='Adres e-mail')
    text = models.TextField(max_length=3000, verbose_name='Opis strony')
    kategoria = models.ForeignKey(Kategorie, verbose_name='Kategoria')
    data_publikacji = models.DateTimeField(blank=True, null=True, verbose_name='Data publikacji')

    class Meta:
        verbose_name='Strona www'
        verbose_name_plural = 'Strony www'

    def publikacja(self):
        self.data_publikacji=timezone.now()
        self.save()

    def __str__(self):
        return self.nazwa

Upvotes: 0

Views: 1691

Answers (1)

Exprator
Exprator

Reputation: 27503

the problem is you are providing a default value as well as unique=True

thus django takes the default value as a value for all and cannot take unique

so either use this

slug_kat = models.SlugField(max_length=255, unique=True, verbose_name='Odnośnik')

or

slug_kat = models.SlugField(max_length=255,  verbose_name='Odnośnik', default='')

Upvotes: 2

Related Questions