Django IntegrityError: UNIQUE constraint failed

Viewed 522

I'm trying to prevent a certain Insert if a product has base_image=True but allow as many insertions as we want when base_image=False.

I've implemented it with django.db.models.UniqueConstraint, EVERYTHING WORKS FINE but in django admin panel instead of getting a red alert in adding view, I'm getting IntegrityError.

here is my model (media.py):

from django.db import models
from apiv1.models.products import Product

class Media(models.Model):
    """ Media table, contains images file names """

    product = models.ForeignKey(Product, related_name='media', on_delete=models.CASCADE, blank=False)
    file_name = models.CharField(max_length=191, blank=False, unique=True)
    base_image = models.BooleanField(blank=False)

    class Meta:

        constraints = [
            models.UniqueConstraint(
                fields=[
                    'product',
                ],
                condition=models.Q(base_image=True),
                name='unique_base_image'
            ),
        ]

    def __str__(self):
        return self.file_name

and this is the error:

IntegrityError at /admin/apiv1/media/add/

UNIQUE constraint failed: apiv1_media.product_id

Request Method:     POST
Request URL:    http://127.0.0.1:8000/admin/apiv1/media/add/
Django Version:     3.1.4
Exception Type:     IntegrityError
Exception Value:    

UNIQUE constraint failed: apiv1_media.product_id

Exception Location:     /Users/sal/devel/artiashco_tipnety_cbir/env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py, line 413, in execute
Python Executable:  /Users/sal/devel/artiashco_tipnety_cbir/env/bin/python
Python Version:     3.7.3
Python Path:    

['/Users/sal/devel/artiashco_tipnety_cbir',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload',
 '/Users/sal/devel/artiashco_tipnety_cbir/env/lib/python3.7/site-packages']

Server time:    Wed, 30 Dec 2020 12:58:16 +0000

Expectation: red bootstrap alert in django admin panel

0 Answers
Related